1.节点定义
struct TreeNode{
int data;
TreeNode *lChild;
TreeNode *rChild;
};
2.前序,中序,后续遍历
void PreOrder(TreeNode *&p){
if (NULL == p) return;
cout << p->data << ' ';
PreOrder(p->lChild);
PreOrder(p->rChild);
}
void MidOrder(TreeNode *&p){ //中序遍历即从小到大打印节点
if (NULL == p) return;
MidOrder(p->lChild);
cout << p->data << ' ';
MidOrder(p->rChild);
}
void PosOrder(TreeNode *&p){
if (NULL == p) return;
PosOrder(p->lChild);
PosOrder(p->rChild);
cout << p->data << ' ';
}
3.节点插入
int InsertTreeNode(TreeNode *&myTree, int data){
TreeNode *NewNode = new TreeNode;
NewNode->data = data;
NewNode->lChild = NULL;
NewNode->rChild = NULL;
if (myTree == NULL){ //如果根节点不存在,即没有节点,把当前节点当做根节点
myTree = NewNode;
return 1;
}
else{
if (data < myTree->data){
InsertTreeNode(myTree->lChild, data);
}
else{
InsertTreeNode(myTree->rChild, data);
}
return 1;
}
return 0;
}
4.数组到树的转化
void BuildTree(TreeNode *&myTree, int *a, int len){
for (int i = 0; i < len; i++){
InsertTreeNode(myTree, a[i]);
}
}
5.树的高度
int CaculateHeight( TreeNode *p){
if (NULL == p) return 0;
int left = 0;
int right = 0;
left = CaculateHeight(p->lChild);
right = CaculateHeight(p->rChild);
return (left > right) ? (++left) : (++right);
}
6.测试
void main(){
//int ss[] = { 1, 6, 3, 7, 3, 5, 0 };
int ss[] = { 5, 6, 7, 8, 1, 2, 3, 5, 6, 7, 8, 5, 6, 7, 8, 9 };
int len = (sizeof(ss)) / (sizeof(int));
TreeNode *myTree = NULL;
BuildTree(myTree, ss, len);
cout << CaculateHeight(myTree) << endl;
PreOrder(myTree);
cout << endl;
MidOrder(myTree);
cout << endl;
PosOrder(myTree);
cout << endl;
}