我知道如何找到BST的直径。
int diameter(struct node * tree)
{
if (tree == 0)
return 0;
int lheight = height(tree->left);
int rheight = height(tree->right);
int ldiameter = diameter(tree->left);
int rdiameter = diameter(tree->right);
return max(lheight + rheight + 1, max(ldiameter, rdiameter));
}
int height(struct node* node)
{
if(node == NULL)
return 0;
return 1 + max(height(node->left), height(node->right));
}
我应该在代码中进行哪些更改以打印路径,即从一个叶节点到另一个直径叶节点的序列中对应于树直径的节点。
例如: -
8
/ \
1 12
\ /
5 9
/ \
4 7
/
6
输出应为6 7 5 1 8 12 9
答案 0 :(得分:3)
这是一种用于查找二叉树的最大深度的算法:
max_height
的变种。depth
的变量。depth
初始化为零。depth
。depth
大于max_height
,请将max_height
设置为
depth
。depth
。 这假设读者知道如何遍历二叉树;这是另一篇文章的主题。
答案 1 :(得分:0)
struct node
{
node* left,right;
int data;
};
struct path
{
node *nodepointer;
int length;
};
int flag=0;
node *x,*y,*lca;
path *printpath(node *leaf,int d)
{
if(flag==0)
{
path *dia= new path;
dia->length=0;
dia->nodepointer=NULL;
if(leaf==NULL)
return dia;
path *a=new path;
path *b=new path;
a=printpath(leaf->left,d);
b=printpath(leaf->right,d);
if(a->length + b->length + 1 == d )
{
lca=leaf;
x=a->nodepointer;
y=b->nodepointer;
flag=1;
}
dia->length=max(a->length,b->length)+1;
if(a->length > b->length && a->nodepointer!=NULL)
{
dia->nodepointer=a->nodepointer;
}
if(b->length >= a->length && b->nodepointer!=NULL)
{
dia->nodepointer=b->nodepointer;
}
if(a->nodepointer==NULL && b->nodepointer==NULL)
{
dia->nodepointer=leaf;
}
return dia;
}
}