二叉树

来源:互联网 发布:进销存软件免费版app 编辑:程序博客网 时间:2024/06/05 18:41
#include"iostream"#include"stdio.h"using namespace std;typedef struct BiTNode{char data;struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;/*创建一颗二叉树*/void CreatBiTree(BiTree *T){char c;cin >> c;if (c == '#') *T = NULL;else{*T = new BiTNode;//创建根节点,给根节点开辟空间(*T)->data = c; //将c的值存入T的数据域中CreatBiTree(&(*T)->lchild);//递归地创建左子树CreatBiTree(&(*T)->rchild);//递归地创建右子树}}void visit(char c, int level){cout << c << " is at " << level << "th level of BiTree" << endl;}void PreOrderTraverse(BiTree T, int level){if (T){visit(T->data, level);PreOrderTraverse(T->lchild, level + 1);PreOrderTraverse(T->rchild, level + 1);}}void ZHONGOrderTraverse(BiTree T, int level){if (T){PreOrderTraverse(T->lchild, level + 1);visit(T->data, level);PreOrderTraverse(T->rchild, level + 1);}}void HOUOrderTraverse(BiTree T, int level){if (T){PreOrderTraverse(T->lchild, level + 1);PreOrderTraverse(T->rchild, level + 1);visit(T->data, level);}}int getleafNode(BiTree T)//利用递归用叶子结点个数{if (T == NULL)return 0;if (T->lchild == NULL&&T->rchild == NULL)return 1;return getleafNode(T->lchild) + getleafNode(T->rchild);}int getTreeCount(BiTree T){if (T == NULL)return 0;return getTreeCount(T->lchild) + getTreeCount(T->rchild)+1;}int getheight(BiTree T){if (T == NULL){return 0;}else{int hl = getheight(T->lchild);int hr = getheight(T->rchild);if (hl > hr)return ++hl;elsereturn ++hr;}}int main(){int level = 1;BiTree T = NULL;//初始化根节点CreatBiTree(&T);PreOrderTraverse(T, level);cout <<"该二叉树叶子结点的个数:"<< getleafNode(T) << endl;cout << "该二叉树结点个数:" << getTreeCount(T) << endl;cout << "该二叉树的高度:" << getheight(T) << endl;}

0 0
原创粉丝点击