【问题标题】:How to find and return bottom-most(Deepest Node) node of a binary tree? binary search tree?如何查找并返回二叉树的最底部(最深节点)节点?二叉搜索树?
【发布时间】:2013-02-21 10:02:32
【问题描述】:

我有一个binary tree,唯一的条件是在最深处有一个节点。树中的节点具有父属性(以及左、右、数据)

是否可以确定最深层次的节点比O(N)更好? 如果树是binary search tree (right->data > parent->data, left->data < parent->data)而不是二叉树怎么办?

我可以使用广度优先方法到达那里,该方法可以在 O(N) 内完成二叉树和二叉搜索树的工作,但我想知道是否有更好的方法。

【问题讨论】:

  • 节点深度的概念与其持有的值正交。除非你的树结构以某种方式跟踪它,否则你不可能比 O(n) 更快地做到这一点。

标签: algorithm tree binary-tree binary-search-tree


【解决方案1】:

没有比O(n)做得更好的方法了。

当所有节点都只有左子节点时,考虑一棵树 - 您需要扫描所有节点才能找到最深的节点。

【讨论】:

  • 对不起,我的意思是说 O(n) 而不是 log(n)... 有什么办法可以比 N 时间更好吗?
  • 我不认为你能比O(n)更好
【解决方案2】:

即使使用平衡树,您也必须检查每个子树以找到最深的节点,例如:

struct RESULT{
    Node *node;
    int level;
};
RESULT getDeepest( Node *root ){
    if( root == NULL ){
        RESULT result = {NULL, 0};
        return result;
    }
    RESULT lResult = getDeepest( root->left );
    RESULT rResult = getDeepest( root->right );
    RESULT result = lResult.level < rResult.level ? rResult : lResult;
    ++ result.level;
    if( result.node == NULL )
        result.node = root;
    return result;
}

【讨论】:

    【解决方案3】:
    public Node deepestNode(Node root, int level){
            int deepestLevel=0;
            Node deepestNode=null;
            if(root==null){
                return null;
            }
            deepestNode(root.left,level++);
            if(level>deepestLevel){
                deepestLevel=level;``
                deepestNode =root;
            }
            deepestNode(root.right,level++);//not sure of increment
            return deepestNode;
        }
    

    【讨论】:

    • 虽然这段代码可能会解决问题,但它需要一个解释才能成为答案。
    猜你喜欢
    • 2023-03-29
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多