我有一个binary tree
唯一的条件,即最深层次有一个节点。树中的节点具有父属性(以及左、右、数据)
是否可以确定最深层次的节点比O(N
) 更好?如果树是 abinary search tree (right->data > parent->data, left->data < parent->data)
而不是二叉树怎么办?
我可以使用广度优先方法到达那里,该方法可以在 O(N) 中完成二叉树和二叉搜索树的工作,但想知道是否有更好的方法。
我有一个binary tree
唯一的条件,即最深层次有一个节点。树中的节点具有父属性(以及左、右、数据)
是否可以确定最深层次的节点比O(N
) 更好?如果树是 abinary 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;
}