Algorithm 查找二叉树的第n个有序节点,其中每个节点在其子树中包含左节点数

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

我遇到了这个问题,似乎在任何地方都找不到解决办法

给定一个二叉树,其中每个节点都包含一个表示剩余节点数量的数字 在其子树中,编写一个返回第n个顺序的函数 遍历节点


查找左节点非常简单,但是如何使用有关左节点数量的信息来改进流程?

正如@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)
}