~求二叉树中最远的两个节点的距离~

来源:互联网 发布:仓库数据分析报告 编辑:程序博客网 时间:2024/05/21 11:01

 二叉树经典面试题之一:求二叉树中最远的两个节点的距离

 

 解题思路:

既然求二叉树中最远的两个节点的距离,那么我们首先画一个普通的二叉树来分析:

 

由上述图可得到两个最远的节点为3和5,而距离为这两个节点的最近公共祖父的左右高度和。

 

现在我需要考虑一个特殊的二叉树来验证我的结论是否正确:

 

 

由上述图可得到两个最远的节点为4和6,而距离为这两个节点的最近公共祖父的左右高度和。

 

 依据上述结论,可编写出解题的代码,完整的源代码及测试用例如下:

size_t MaxPath(BinaryTreeNode<int>* root, size_t& max_path){if(root == NULL){return NULL;}size_t left = MaxPath(root->_left, max_path);size_t right = MaxPath(root->_right, max_path);if(left + right > max_path){max_path = left + right;}return left > right ? left + 1: right + 1;}void TestMaxPath(){int array[] = {1,2,3,'#','#',4};int len = sizeof(array)/sizeof(array[0]);BinaryTree<int> t(array, len, '#');size_t max_path = 0;cout<<MaxPath(t._root, max_path)<<endl;}


 


 

0 0
原创粉丝点击