查找二叉树中的最大距离

来源:互联网 发布:松下plc编程实例 编辑:程序博客网 时间:2024/05/21 16:40
/**查找二叉树中的最大距离距离:也就是两个节点存在的节点数+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); //测试用例1void create_test_case_2(node*& node); //测试用例2int 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; //深度加1if(root->right!=NULL)right=get_max_dis(root->right,max)+1; //深度加1if(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();}