赞
踩
目录
- typedef struct TreeNode {
- char data;//数据域
- TreeNode* Lchild;//左孩子
- TreeNode* Rchild;//右孩子
- }*Tree, TreeNode;
- void CreateTree(Tree& T) {
- char x;
- cin >> x;
- if (x =='*') {
- T = NULL; return;
- }
- else {
- T = new TreeNode;
- T->data = x;
- CreateTree(T->Lchild);
- CreateTree(T->Rchild);
- }
- }
- void Pre_Traversal(const Tree& T) {
- if (T) {
- cout << T->data<<" ";
- Pre_Traversal(T->Lchild);
- Pre_Traversal(T->Rchild);
- }
- }
- void Ino_Traversal(const Tree& T) {
- if (T) {
- Ino_Traversal(T->Lchild);
- cout << T->data<<" ";
- Ino_Traversal(T->Rchild);
- }
- }
- void Pos_Traversal(const Tree& T) {
- if (T) {
- Pos_Traversal(T->Lchild);
- Pos_Traversal(T->Rchild);
- cout << T->data << " ";
-
- }
- }
- bool TreeEmpty(const Tree& T) {
- if (T == NULL)
- {
- cout << "该二叉树为空!"<<endl;
- return true;
- }
- else
- {
- cout << "该二叉树为不为空!"<<endl;
- return false;
- }
- }
- int TreeNodeCount(const Tree& T) {
- if (T == NULL)
- return 0;
- else if (T->Lchild == NULL && T->Rchild == NULL)
- return 1;
- else
- return TreeNodeCount(T->Lchild) + TreeNodeCount(T->Rchild)+1;
-
- }
- int TreeDepth(const Tree& T) {
- if (T == NULL) return 0;
- else {
- int i = TreeDepth(T->Lchild);
- int j = TreeDepth(T->Rchild);
- return i > j ? i + 1 : j + 1;
- }
-
- }
- #include<iostream>
-
-
- using namespace std;
-
- typedef struct TreeNode {
- char data;//数据域
- TreeNode* Lchild;//左孩子
- TreeNode* Rchild;//右孩子
- }*Tree, TreeNode;
-
- //前序创建二叉树
- void CreateTree(Tree& T) {
- char x;
- cin >> x;
- if (x =='*') {
- T = NULL; return;
- }
- else {
- T = new TreeNode;
- T->data = x;
- CreateTree(T->Lchild);
- CreateTree(T->Rchild);
- }
- }
- //先序遍历
- void Pre_Traversal(const Tree& T) {
- if (T) {
- cout << T->data<<" ";
- Pre_Traversal(T->Lchild);
- Pre_Traversal(T->Rchild);
- }
- }
- //中序遍历
- void Ino_Traversal(const Tree& T) {
- if (T) {
- Ino_Traversal(T->Lchild);
- cout << T->data<<" ";
- Ino_Traversal(T->Rchild);
- }
- }
- //后序遍历
- void Pos_Traversal(const Tree& T) {
- if (T) {
- Pos_Traversal(T->Lchild);
- Pos_Traversal(T->Rchild);
- cout << T->data << " ";
-
- }
- }
- //二叉树是否为空
- bool TreeEmpty(const Tree& T) {
- if (T == NULL)
- {
- cout << "该二叉树为空!"<<endl;
- return true;
- }
- else
- {
- cout << "该二叉树为不为空!"<<endl;
- return false;
- }
- }
- //求二叉树的节点数
- int TreeNodeCount(const Tree& T) {
- if (T == NULL)
- return 0;
- else if (T->Lchild == NULL && T->Rchild == NULL)
- return 1;
- else
- return TreeNodeCount(T->Lchild) + TreeNodeCount(T->Rchild)+1;
-
- }
- //求二叉树的深度
- int TreeDepth(const Tree& T) {
- if (T == NULL) return 0;
- else {
- int i = TreeDepth(T->Lchild);
- int j = TreeDepth(T->Rchild);
- return i > j ? i + 1 : j + 1;
- }
-
- }
-
- int main(){
- Tree T;
- cout << "请按先序遍历的顺序创建二叉树,若其节点的左孩子或右孩子不存在则使用*代替!如:(ABD**E**CF**G**)" << endl;
- CreateTree(T);
- TreeEmpty(T);
- cout << "先序遍历的结果为:";
- Pre_Traversal(T) ;
- cout<< endl;
- cout << "中序遍历的结果为:";
- Ino_Traversal(T);
- cout << endl;
- cout << "后序遍历的结果为:";
- Pos_Traversal(T);
- cout << endl;
- cout << "该树的深度为:"<< TreeDepth(T)<< endl;
- cout << "该树的节点数为:" << TreeNodeCount(T) << endl;
- system("pause");
- }
-
下图为测试用例: (ABD**E**CF**G**)
前序遍历:A B D E C F G
中序遍历:D B E A F C G
后序遍历:D E B F G C A
总节点数 :7
树的深度:3
运行截图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。