求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
#include <iostream>
using namespace std;
struct BSTreeNode {
int data;
int high;
BSTreeNode * left;
BSTreeNode * right;
};
void insertTree(BSTreeNode * & root, int data) {
if(root == NULL) {
BSTreeNode * p = new BSTreeNode;
p->data = data;
p->left = NULL;
p->right = NULL;
p->high = 0;
root = p;
}
else {
if(data > root->data) insertTree(root->right,data);
else if(data< root->data) insertTree(root->left,data);
}
}
void addDistance(BSTreeNode * & root) {
if(root->left == NULL&&root->right == NULL) root->high = 1;
else {
if(root->left == NULL&&root->right != NULL) root->high = root->right->high + 1;
if(root->right == NULL && root->left != NULL) root->high = root->left->high + 1;
if(root->left != NULL && root->right != NULL) {
if(root->left->high >= root->right->high ) root->high = root->left->high + 1;
if(root->left->high < root->right->high ) root->high = root->right->high +1;
}
}
}
void travers(BSTreeNode * &root) {
if(root->left != NULL) travers(root->left);
if(root->right != NULL) travers(root->right);
cout<<root->data<<endl;
addDistance(root);
}
int main() {
BSTreeNode * r =NULL;
insertTree(r,10);
insertTree(r,8);
insertTree(r,9);
insertTree(r,15);
insertTree(r,12);
insertTree(r,3);
insertTree(r,6);
insertTree(r,18);
insertTree(r,4);
insertTree(r,2);
insertTree(r,5);
insertTree(r,20);
insertTree(r,13);
travers(r);
cout<<" "<<r->right->high + r->left->high <<endl;
}