设计一个算法,计算出给定二叉树中任意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的结点个数.
计算二叉树的高度
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++算法求任意二叉树中一条最长的路径,并输出此路径上各结点的值