/**
查找二叉树中的最大距离
距离:也就是两个节点存在的节点数+1
*/
#include <iostream>
using std::cout;
using std::endl;
struct node
{
node()
:left(NULL)
,right(NULL)
{
}
node* left;
node* right;
};
unsigned get_max_dis(node* root,int& max); 计算
void create_test_case(node*& node); //测试用例1
void create_test_case_2(node*& node); //测试用例2
int main(int argc,char* argv[])
{
int max=0;
node* p_node;
create_test_case(p_node);
get_max_dis(p_node,max);
cout<<max<<endl;
create_test_case_2(p_node);
get_max_dis(p_node,max);
cout<<max<<endl;
system("PAUSE");
return 0;
}
unsigned get_max_dis(node* root,int& max)
{
if(root==NULL)
return 0; //返回深度
int left=0;
int right=0;
if(root->left!=NULL)
left=get_max_dis(root->left,max)+1; //深度加1
if(root->right!=NULL)
right=get_max_dis(root->right,max)+1; //深度加1
if(left+right>max)
{
max=left+right; //判断子树max与left+right谁大
}
return left>right?left:right;
}
void create_test_case(node*& node)
{
node=new struct node();
node->left=new struct node();
node->left->right=new struct node();
node->right=new struct node();
node->right->left=new struct node();
}
void create_test_case_2(node*& node)
{
node=new struct node();
node->right=new struct node();
node->left=new struct node();
node->left->left=new struct node();
node->left->right=new struct node();
node->left->left->left=new struct node();
node->left->left->left->left=new struct node();
node->left->right->left=new struct node();
node->left->right->left->right=new struct node();
}
查找二叉树中的最大距离
最新推荐文章于 2022-09-23 09:52:51 发布