Algorithm 二叉搜索树-到叶子的最大距离
我需要编写一个线性算法,获得一个BST,并向每个节点添加一个字段,该字段与叶的最大距离(如果节点是叶,则距离为零) 我只需要一个伪代码和运行时复杂性 谢谢,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、 距离=距离;
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需要到任何叶的(最大)距离。