给定一个完整的二叉树,其中节点的索引从1到N(索引1是根,N是树中的节点数)。在O(logN)时间复杂度下,我们能发现树中是否存在具有特定索引的节点吗?
How is the indexing done?
for a node say it has index x
/ \
node.left is 2*x node.right is 2*x+1
下面我写了在O(N)中运行的代码
当节点位于右子树深处时,O(N)解似乎效率很低。我们可以避免在根级别访问左子树吗?
利用O(logN)时间复杂度是一个完整的二叉树这一事实,有可能实现这一目标吗?
##TreeNode object
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
##findIndex
def findIndex(root,index,target):
if root == None:
return False
if index == target:
return True
leftSide = findIndex(root.left,2*index,target)
rightSide = findIndex(root.right,2*index+1,target)
return (leftSide or rightSide)
##Create tree
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
"""
For the sake of simplicity,
the tree node values are the same as their index.
1
/ \
2 3
/ \
4 5
"""
##call findIndex
## findIndex(root, startIndex, targetIndex)
print findIndex(root,1,1) ## returns True
print findIndex(root,1,8) ## returns False
使用堆栈:
private boolean nodeExist(TreeNode node, int idx){
Stack<Integer> stack = new Stack<>();
int temp = idx;
while(temp !=1){
stack.push(temp);
temp /=2;
}
while(!stack.isEmpty()){
if(stack.pop() %2 ==0){
node = node.left;
}else{
node = node.right;
}
}
return node !=null;
}
因为我们已经知道左节点是2*n,右节点是2*n 1。让我们首先从输入中给定的索引开始,找出路径。例如,如果我们将索引设为10,那么我们知道10应该在5的左边,而5应该在2的右边,也就是根或1的左边。所以路径是左、右、左。现在,只要在二叉树中遍历这条路径,只要它的null(如果节点存在)返回true或false。
我需要检查节点是否是二叉树中的叶子。这是我当前的代码。 它向我发送了一条错误消息:“HW371937.hs:C:\Users\lenovo\Desktop\���\��� HASKELL\hw371937。hs:(22,1)-(25,91):函数isLeaf中的非穷举模式” 我不知道如何递归地检查下一个节点是否是叶子。任何帮助都将受到感谢。
我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?
QSTN:当它是叶节点时,为什么需要初始化ls=0或rs=0。考虑链接中给出的树,如果我们到达节点4,如果(node==NULL isLeaf(node))返回1;上面的代码将1(true)返回到调用它的函数,即节点10,类似地,右侧将true返回到节点10,因此我们现在可以进入下面的循环,因为如果(isSumTree(node->left)&&isSumTree(node->left)&&isS
我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?
我需要编写伪代码来检查有效的二叉树是否是搜索二叉树。 我创建了一个数组来保存树的顺序值。如果顺序值是降序的,这意味着它确实是BST。然而,我对INOVERAR方法中的递归有一些问题。 我需要更新数组的索引,以便按照值在树上的顺序将其提交给数组。 我不确定在递归过程中索引是否真的得到了正确更新。。到底是不是?如果你发现问题,能帮我解决吗?谢谢 伪代码 第一功能 IsBST(节点) 大小← 树化(节点
编写一个Lisp程序来检查一个二叉树是否是二叉搜索树。 我正在尝试编写一个二进制递归方法,但我是一个初学者,我不知道从这里去哪里。