标签:
#include<iostream> using namespace std; //二叉树 节点结构 typedef struct TNODE_ { int data; struct TNODE_*left; struct TNODE_*right; }TNode; //获取树的高度=路径+1(最长路径经过的边数+1) int GetLRDistance(TNode*t) { int len=0; if(t==NULL) { return 0; }else{ int lenL=GetLRDistance(t->left); int lenR=GetLRDistance(t->right); len=(lenL>lenR)?lenL:lenR; len+=1; //return (len+1); } return len; } //获取树中节点之间的最大距离(可能是两个叶子节点 或叶子节点与根节点) int GetMaxDistance(TNode*t) { int distance=0; if(t==NULL) { distance=0; //return 0; }else if(t->left!=NULL && t->right==NULL){ //判断是否是子树的两个叶子节点之间,还是其中的一个叶子节点与根节点 int temp_distance=GetMaxDistance(t->left); int max_RootLeft=GetLRDistance(t->left); distance=temp_distance>max_RootLeft?temp_distance:max_RootLeft; }else if(t->left==NULL && t->right!=NULL){ //判断是否是子树的两个叶子节点之间,还是其中的一个叶子节点与根节点 int temp_distance=GetMaxDistance(t->right); int max_RootLeft=GetLRDistance(t->right); distance=temp_distance>max_RootLeft?temp_distance:max_RootLeft; }else if(t->left!=NULL && t->right!=NULL){ //判断是否左右子树之间(左子树的高度+右子树的高度),还是左子树的节点之间,还是右子树的节点之间 int maxLeft=GetMaxDistance(t->left); int maxRight=GetMaxDistance(t->right); int max_RootLeft=0,max_RootRight=0; max_RootLeft=GetLRDistance(t->left); max_RootRight=GetLRDistance(t->right); if(maxRight<maxLeft)distance=maxLeft; else distance=maxRight; int temp=max_RootRight+max_RootLeft; if(temp>distance)distance=temp; } return distance; } void OutputF(TNode*t) { if(t!=NULL) cout<<t->data<<" "; else return; OutputF(t->left); OutputF(t->right); } void Test() { TNode*t=new TNode(); t->data=1; t->left=t->right=NULL; TNode*t1=new TNode(); t1->data=2; t1->left=t1->right=NULL; t->left=t1; TNode*t2=new TNode(); t2->data=3; t2->left=t2->right=NULL; t1->left=t2; TNode*t3=new TNode(); t3->data=4; t3->left=t3->right=NULL; t->right=t3; TNode*t4=new TNode(); t4->data=5; t4->left=t4->right=NULL; t2->right=t4; TNode*t5=new TNode(); t5->data=6; t5->left=t5->right=NULL; t3->right=t5; TNode*t6=new TNode(); t6->data=7; t6->left=t6->right=NULL; t3->left=t6; TNode*t7=new TNode(); t7->data=8; t7->left=t7->right=NULL; t6->left=t7; //打印先序遍历的结果; OutputF(t); cout<<endl; cout<<"树的最大距离值: "<<GetMaxDistance(t)<<endl; } int main() { Test(); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/xy1131975903/article/details/48034465