我需要编写一个获得BST的线性算法,并向每个NODE添加一个到LEAF的最大距离的字段(如果NODE是LEAF,则距离为零)。
我只需要一个伪代码和运行时复杂性。
谢谢, 奥弗。
答案 0 :(得分:0)
运行时间是树中的项目数。
void addField(node n, int distance)
{
if(n.left != null)
{
addField(n.left, distance + 1);
}
if(n.right != null)
{
addField(n.right, distance + 1);
}
if((n.right == null) && (n.right == null))
{
n.distance = distance;
}
}
答案 1 :(得分:0)
这个函数适用于平衡的二叉树,需要对不平衡的树和东西进行一些调整,但你应该能够自己解决这个问题。
它在树的根节点上调用,并将重复工作
struct Node(){
int distance;
Node* leftChild, rightChild;
bool isLeaf(){ return rightChild==NULL && leftChild==NULL};
}
int dist(Node n){
if(n.isLeaf()){
n.distance = 0;
}else{
n.distance = 1 + max(dist(n.leftChild),dist(n.rightChild));
}
return n.distance;
}
运行时复杂性是线性的,但它不是尾递归的。因此,最大节点数受到堆栈深度的限制。