繁体   English   中英

如何找到并返回二叉树的最底(最深节点)节点? 二进制搜索树?

[英]How to find and return bottom-most(Deepest Node) node of a binary tree? binary search tree?

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

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

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

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

当所有节点仅剩下一个子节点时,考虑一棵树-您需要扫描所有节点才能到达最深的节点。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM