我需要在二叉树中找到最左边的节点。这可能听起来很幼稚但不是。我试过这个,但我认为它会失败:
Node* findLeftMostNode(Node* root){
if(root->left==null)
return root;
findLeftMostNode(root->left);
}
问题是左模式节点可以处于任何级别,因此我们需要处理它。
X
\
X
/\
X X
/
X
/
X
答案 0 :(得分:3)
通过这种计算节点“左侧”的方法,您总是必须递归到两个子节点,因为任何子节点都可以包含一系列 n 节点,这些节点将留给任何 ñ
因此,解决方案实际上非常简单:为树中的每个节点计算x并返回最小的节点:
Node* findLeftmostNode(Node* current, int x = 0)
{
current->x = x;
Node* best;
// leftmost child in the left subtree is always better than the root
if (current->left == null)
best = current;
else
best = findLeftmostNode(current->left, x - 1);
if (current->right != null)
{
Node* found = findLeftmostNode(current->right, x + 1);
if (found->x < best->x)
best = found;
}
return best;
}
答案 1 :(得分:0)
Node *findLeftMostNode(Node* root){
for( ; root; root =root->left)
if (!root->left) break;
}
return root;
}