设计一个算法,计算出给定二叉树中任意2 个结点之间的最短路径。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一个算法,计算出给定二叉树中任意2 个结点之间的最短路径。相关的知识,希望对你有一定的参考价值。

参考技术A 对于树中的每一个节点,维护一个dis[i],代表i节点到根节点路径长度。
写一个Lca(x,y)函数,用来返回x节点和y节点的最近公共祖先是哪一个节点。
树中最近公共祖先很很多种求法:
在信息学竞赛中一般使用的是倍增法,或者动态树。
如果你只是写一个普通的程序那么你可以朴素的取查找。当然程序会相对应的慢一点。
算法流程如下:
k=Lca(x,y);
dist=dis[x]+dis[y]-2*dis[k];//画个图就理解拉。

分别统计二叉树中树叶和度为1的结点个数.

分别统计二叉树中树叶和度为1的结点个数.
计算二叉树的高度

不好意思 昨天比较忙 屁颠屁颠的 今天给你写了下 就把这3个算法写了下 在自己的程序上测试过了 都没问题 树的建立就你自己做吧 3个操作如下
int LeafCount(BTree T)

if (!T) return 0;
else if (!T->lchild && !T->rchild)

return 1;

else

return LeafCount(T->lchild) + LeafCount(T->rchild);



void OneDegree(BTree T,int &count)

if (!T || (!T->lchild && !T->rchild)) return;
else if (T->lchild && !T->rchild)

++count;
OneDegree(T->lchild,count);

else if (!T->lchild && T->rchild)

++count;
OneDegree(T->rchild,count);

else

OneDegree(T->lchild,count);
OneDegree(T->rchild,count);



int TreeDepth(BTree T)

if (!T) return 0;
else

return (TreeDepth(T->lchild) > TreeDepth(T->rchild) ? TreeDepth(T->lchild) : TreeDepth(T->rchild)) + 1;


参考技术A 结点个数=2*高度 -1

以上是关于设计一个算法,计算出给定二叉树中任意2 个结点之间的最短路径。的主要内容,如果未能解决你的问题,请参考以下文章

编写c++算法求任意二叉树中一条最长的路径,并输出此路径上各结点的值

求二叉树中任意两个结点的距离

LeetCode每日一题2020.6.21 124. 二叉树中的最大路径和

二叉树 ,你是完整的吗?

算法二叉树学习笔记 - 已知结点数计算可构建出多少种二叉树

二叉树的操作之统计二叉树中节点的个数