在二叉树中查找最左侧的节点

时间:2013-02-28 18:41:35

标签: c algorithm binary-tree

我需要在二叉树中找到最左边的节点。这可能听起来很幼稚但不是。我试过这个,但我认为它会失败:

Node* findLeftMostNode(Node* root){
    if(root->left==null)
       return root;
    findLeftMostNode(root->left);
}

问题是左模式节点可以处于任何级别,因此我们需要处理它。

          X
          \
           X
           /\
          X  X
         /
        X
       /
      X

2 个答案:

答案 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;
}