Algorithm 查找二叉树的第n个有序节点,其中每个节点在其子树中包含左节点数
我遇到了这个问题,似乎在任何地方都找不到解决办法 给定一个二叉树,其中每个节点都包含一个表示剩余节点数量的数字 在其子树中,编写一个返回第n个顺序的函数 遍历节点Algorithm 查找二叉树的第n个有序节点,其中每个节点在其子树中包含左节点数,algorithm,binary-tree,Algorithm,Binary Tree,我遇到了这个问题,似乎在任何地方都找不到解决办法 给定一个二叉树,其中每个节点都包含一个表示剩余节点数量的数字 在其子树中,编写一个返回第n个顺序的函数 遍历节点 查找左节点非常简单,但是如何使用有关左节点数量的信息来改进流程?正如@m69给出的提示-您可以使用左节点计数来避免一些不必要的步骤 假设有一棵树,其中根在其左子树中有10个节点:然后当请求节点n-th(按顺序)时,如果n=1-10,则答案将在左子树中。但是,如果n=11,则答案将是根,否则答案将在右子树中 考虑以下伪代码: findN
查找左节点非常简单,但是如何使用有关左节点数量的信息来改进流程?正如@m69给出的提示-您可以使用左节点计数来避免一些不必要的步骤 假设有一棵树,其中根在其左子树中有10个节点:然后当请求节点n-th(按顺序)时,如果
n=1-10
,则答案将在左子树中。但是,如果n=11
,则答案将是根,否则答案将在右子树中
考虑以下伪代码:
findNnode(TreeNode root, int n) {
if (root.leftNodes + 1 == n )
return root;
if (root.leftNodes <= n)
return findNnode(root.left, n)
newN = n - root.leftNodes - 1; // after substract all node who came before in in-order
return findNnode(root.right, newN)
}
findNnode(树节点根,int n){
if(root.leftNodes+1==n)
返回根;
如果(root.leftNodes),请参见类似问题:
findNnode(TreeNode root, int n) {
if (root.leftNodes + 1 == n )
return root;
if (root.leftNodes <= n)
return findNnode(root.left, n)
newN = n - root.leftNodes - 1; // after substract all node who came before in in-order
return findNnode(root.right, newN)
}