直接上代码,有空解释
注意这种建树方式为先序建立
sampleinput
ABD*F***CE***
输出
先序遍历结果
ABDFCE
中序遍历结果
DFBAEC
后序遍历结果
FDBECA
树的深度为4
叶节点个数为2
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <malloc.h> #include <iostream> using namespace std; struct Node { char data; struct Node *l, *r; }; int sum = 0; struct Node *Creat(struct Node *p) { char q; scanf("%c", &q); if(q == ‘*‘) p = NULL; else { p = (struct Node *)malloc(sizeof(struct Node)); p->data = q; p->l = Creat(p->l); p->r = Creat(p->r); } return p; } int Xianxu(struct Node *p) { if(p) { printf("%c", p->data); Xianxu(p->l); Xianxu(p->r); } return 0; } int Zhongxu(struct Node *p) { if(p) { Zhongxu(p->l); printf("%c", p->data); Zhongxu(p->r); } return 0; } int Houxu(struct Node *p) { if(p) { Houxu(p->l); Houxu(p->r); printf("%c", p->data); } return 0; } int Deep(struct Node *p) { int c1, c2; if(!p) return 0; c1 = Deep(p->l); c2 = Deep(p->r); return c1 > c2 ? c1+1 : c2+1; } int Jiedian(struct Node *p) { if(p) { Jiedian(p->l); Jiedian(p->r); if((p->l == NULL) && (p->r == NULL)) sum++; } return sum; } int main() { int sum; struct Node *head; head = (struct Node *)malloc(sizeof(struct Node)); head = Creat(head); printf("先序遍历结果\n"); Xianxu(head); printf("\n"); printf("中序遍历结果\n"); Zhongxu(head); printf("\n"); printf("后序遍历结果\n"); Houxu(head); printf("\n"); printf("树的深度为%d\n", Deep(head)); sum = Jiedian(head); printf("叶节点个数为%d\n", sum); return 0; }
原文:http://www.cnblogs.com/rain-1/p/4985638.html