求一个二叉树中两个结点的最大距离分为两个情况:
1: 最大距离为从左子树的最深节点,通过根节点,再到右子树的最深节点
2: 或路径不穿过根节点,而是左子树或右子树的最大距离路径template<class T>
struct BinaryTreeNode
{
BinaryTreeNode(const T& value): data(value), leftchild(NULL), rightchild(NULL){}
T data;
BinaryTreeNode<T>* leftchild;
BinaryTreeNode<T>* rightchild;
};template<class T>
class BinaryTree
{public:
BinaryTree():parent(NULL){}
BinaryTree(const T array[], int size, const T& invalid)
{
int index = 0;
CreateBinaryTree(parent, array, size, index, invalid);
}//求最大距离
void MaxDistance()
{
int maxlen = 0;
cout << MaxDistance(parent, maxlen ) << endl;
cout << maxlen<< endl;
}
private:
void CreateBinaryTree(Node* &parent, const T array[], int size, int & index, const T& invalid)
{
if (index < size&&array[index] != invalid)
{
parent= new BinaryTreeNode(invalid);
parent->data= array[index];CreateBinaryTree(parent->leftchild, array, size, ++index, invalid);
CreateBinaryTree(parent->rightchild, array, size, ++index, invalid);
}
}int MaxDistance(BinaryTreeNode* parent, int &maxlen)
{
if (parent== NULL)
return 0;int leftchildlen = MaxDistance(parent->leftchild, maxlen);
int rightchildlen = MaxDistance(parent->rightchild, maxlen);int temp = leftchildlen + rightchildlen ;
if (temp > maxlen)
maxlen = temp;return leftchildlen > rightchildlen ? leftchildlen + 1 : rightchildlen + 1;
}
BinaryTreeNode* parent;
};void Test()
{
char array[] = "12##3468####5#7#9";
BinaryTree<char> root(array, strlen(array), '#');
root.MaxDistance();
}int main()
{
Test();
return 0;
}
求一个二叉树的任意两个节点的距离:https://blog.csdn.net/qq_38251888/article/details/88831919