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

时间:2018-08-19 23:58:41

标签: algorithm binary-tree

我遇到了这个问题,似乎无法在任何地方找到解决方案。

  

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

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
        self.leftNodes = 0

发现nth node of inorder traversal相当简单,但是如何使用有关剩余节点数的信息来改进流程呢?

1 个答案:

答案 0 :(得分:1)

@ m69给出了提示-您可以使用左节点计数来避免不必要的步骤。

假设有一个树,其根在他的左子树中有10个节点:那么当要求第n个节点(按顺序)时,如果是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)
}  

希望有帮助!