求二叉树中最远的两个节点的距离
短短的代码中其实涉及到了三道题目:
- 利用已知序列递归的建一棵二叉树
- 递归的求一棵树的深度
- 求二叉树中距离最远的两个节点的距离
利用类似的思想判断一棵树是否为平衡二叉树;
:利用递归求树的深度的思想,在其中加入一个最大距离的引用的参数,利用了引用参数的特性,即可求得最大距离,比较简单,下面列出代码及图示;
给出两组测试用例的图示:
//代码实现
#include<iostream>
using namespace std;
//先建一颗二叉树
struct Node
{
int _data;
Node* _left;
Node* _right;
Node(const int& data):_data(data),_left(NULL),_right(NULL){}
};
class BinaryTree
{
Node* _root;
public:
BinaryTree(int* arr,size_t size)
{
int index = 0;
_root = _GreatTree(arr,size,'#',index);
}
//前序递归建树
Node* _GreatTree(int* arr, size_t size,int invalid, int&a