我遇到了这个问题,似乎无法在任何地方找到解决方案。
给出一个二叉树,其中每个节点包含一个数字,该数字表示剩余节点的数量 在其子树中,编写一个返回第n个顺序的函数 遍历节点。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
self.leftNodes = 0
发现nth node of inorder traversal相当简单,但是如何使用有关剩余节点数的信息来改进流程呢?
答案 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)
}
希望有帮助!