Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 二叉搜索树-到叶子的最大距离_Algorithm_Sorting_Data Structures_Binary Search Tree_Computer Science - Fatal编程技术网

Algorithm 二叉搜索树-到叶子的最大距离

Algorithm 二叉搜索树-到叶子的最大距离,algorithm,sorting,data-structures,binary-search-tree,computer-science,Algorithm,Sorting,Data Structures,Binary Search Tree,Computer Science,我需要编写一个线性算法,获得一个BST,并向每个节点添加一个字段,该字段与叶的最大距离(如果节点是叶,则距离为零) 我只需要一个伪代码和运行时复杂性 谢谢, Ofer.运行时间是树中的项目数 void addField(节点n,整数距离) { 如果(n.left!=null) { 添加字段(n.左侧,距离+1); } 如果(n.right!=null) { addField(右侧,距离+1); } 如果((n.right==null)和&(n.right==null)) { n、 距离=距离;

我需要编写一个线性算法,获得一个BST,并向每个节点添加一个字段,该字段与叶的最大距离(如果节点是叶,则距离为零)

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

谢谢,
Ofer.

运行时间是树中的项目数

void addField(节点n,整数距离)
{
如果(n.left!=null)
{
添加字段(n.左侧,距离+1);
}
如果(n.right!=null)
{
addField(右侧,距离+1);
}
如果((n.right==null)和&(n.right==null))
{
n、 距离=距离;
}

}​此函数适用于平衡的二叉树,需要对不平衡的树等进行一些调整,但您应该能够自己解决这个问题

它在树的根节点上被调用,并将循环工作

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

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

向我们展示您的进度到目前为止,您是否成功实现了功能?如果给出的答案有帮助,习惯上会对其进行上选或另外标记正确答案。这将计算出与根的距离。OP需要到任何叶的(最大)距离。