二进制搜索树 - 到LEAF的最大距离

时间:2015-04-18 11:02:22

标签: algorithm sorting data-structures binary-search-tree computer-science

我需要编写一个获得BST的线性算法,并向每个NODE添加一个到LEAF的最大距离的字段(如果NODE是LEAF,则距离为零)。

我只需要一个伪代码和运行时复杂性。

谢谢, 奥弗。

2 个答案:

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

运行时复杂性是线性的,但它不是尾递归的。因此,最大节点数受到堆栈深度的限制。