树
#include<stdio.h> #include<stdlib.h> #include<queue> struct TNode//树的节点 { int data; struct TNode *l,*r; }; TNode* Create()//建树 { char ch; scanf("%c",&ch); if(ch == '.') { return NULL; } else { TNode* t; t = (TNode*)malloc(sizeof(TNode)); t->data = ch; t->l = Create(); t->r = Create(); return t; } } int Deep(TNode* tree)//求树的深度 { int dl=0,dr=0; if(tree) { dl = Deep(tree->l); dr = Deep(tree->r); return dl>dr?dl+1:dr+1; } return 0; } int leaf_num=0; void leaf(TNode* tree)//求树的叶子数目 { if(!tree) return; if(tree->l == NULL && tree->r == NULL) { leaf_num++; } leaf(tree->l); leaf(tree->r); } void PreOrder(TNode* tree)//先序遍历 { if(tree) { printf("%c ",tree->data); PreOrder(tree->l); PreOrder(tree->r); } } void InOrder(TNode* tree)//中序遍历 { if(tree) { InOrder(tree->l); printf("%c ",tree->data); InOrder(tree->r); } } void ProOrder(TNode* tree)//后续遍历 { if(tree) { ProOrder(tree->l); ProOrder(tree->r); printf("%c ",tree->data); } } void cengxu(TNode* tree)//层序遍历 { std::queue<TNode*> Q; if(tree) Q.push(tree); while(!Q.empty()) { TNode* t = Q.front(); Q.pop(); //printf("%c ",t->data); if(t->l!=NULL && t->r!=NULL) { Q.push(t->l); Q.push(t->r); } else if(t->l!=NULL && t->r==NULL) { Q.push(t->l); } else if(t->l==NULL && t->r!=NULL) { Q.push(t->r); } } } int main () { TNode* t = NULL; t = Create(); /*PreOrder(t); printf("\n"); InOrder(t); printf("\n"); ProOrder(t); printf("\n");*/ /*int d = Deep(t); printf("树的深度为:%d\n",d);*/ /*leaf(t); printf("树的叶子数目为:%d\n",leaf_num);*/ //cengxu(t); return 0; }
/*
测试
12..3..
123....
*/
本文来自博客园,作者:永恒&,转载请注明原文链接:https://www.cnblogs.com/Sun-yuan/p/14496115.html