二叉树简单实现(创建、遍历、叶子数等)
来源:互联网 发布:淘宝旺铺基础班 编辑:程序博客网 时间:2024/04/29 17:26
直接代码吧,有问题可以讨论,基本都是采用递归的方式求解,创建二叉树,这个例子对于root结点只有左孩子:
#include "stdafx.h"#include<stdlib.h>#include "math.h"#include <iostream>using namespace std;typedef struct BiTreeNode{char data;BiTreeNode *left;BiTreeNode *right;}BiTreeNode,*PBiTreeNode;static int iCnt = 0;void CreateBiTree(PBiTreeNode &Tree)//创建二叉树{char s[]="ABC$$D$EF$$G$$$";char ch = s[iCnt++];if ( ch == '$' )//$代表不存在Tree = NULL;else{Tree = (PBiTreeNode)malloc(sizeof(BiTreeNode));if (!Tree)exit(OVERFLOW);Tree->data = ch;CreateBiTree(Tree->left);CreateBiTree(Tree->right);}}void PreOder(PBiTreeNode Tree)//先序遍历{if ( !Tree )return;cout << Tree->data << endl;if ( Tree->left )PreOder( Tree->left );if ( Tree->right )PreOder( Tree->right);}void InOder(PBiTreeNode Tree)//中序遍历{if ( !Tree )return;if ( Tree->left )InOder( Tree->left );cout << Tree->data << endl;if ( Tree->right )InOder( Tree->right );}void PostOder(PBiTreeNode Tree)//后序遍历{if ( !Tree )return;if ( Tree->left )InOder( Tree->left );if ( Tree->right )InOder( Tree->right );cout << Tree->data << endl;}void PrintBiTree(PBiTreeNode Tree)//打印二叉树{if ( !Tree )return;cout << Tree->data << endl;if ( Tree->left || Tree->right ){cout <<"(";PrintBiTree(Tree->left);if ( !Tree->right )cout <<",";PrintBiTree(Tree->right);cout <<")";}}int TreeDepth(PBiTreeNode Tree) //二叉树的深度{int lDepth = 0, rDepth = 0;if ( !Tree )return 0;lDepth = TreeDepth( Tree->left );rDepth = TreeDepth( Tree->right );return lDepth > rDepth ? (lDepth + 1) : (rDepth + 1);}int LeavesNum(PBiTreeNode Tree)//叶子数{if ( !Tree )return 0;else if ( !Tree->left && !Tree->right )return 1;elsereturn LeavesNum( Tree->left ) + LeavesNum( Tree->right );}void DestroyBiTree(PBiTreeNode &Tree){if ( !Tree)return;else{DestroyBiTree( Tree->left );DestroyBiTree( Tree->right);free(Tree);Tree = NULL;}}int main(){PBiTreeNode Tree;CreateBiTree( Tree );cout <<"输出二叉树:"<<endl;PrintBiTree( Tree );cout << endl;cout <<"先序遍历结果:"<<endl;PreOder( Tree );cout <<"中序遍历结果:"<<endl;InOder( Tree );cout <<"后序遍历结果:"<<endl;PostOder( Tree );cout <<"树的高度:"<<TreeDepth( Tree )<<endl;cout <<"叶子结点个数:"<< LeavesNum( Tree )<<endl;DestroyBiTree( Tree );}
1 0
- 二叉树简单实现(创建、遍历、叶子数等)
- 二叉树简单实现(创建、遍历、叶子数等)
- 二叉树的简单操作(前中后序遍历,层次遍历,树高,叶子数,交换二叉树等)
- 二叉树的创建、遍历、深度、叶子节点数
- 二叉树创建、三种遍历、叶子节点数
- 二叉树创建以及遍历(j简单创建、遍历、叶子计数、深度计数、销毁)之1
- [c++ 二叉树创建与遍历] 数据结构实验之二叉树三:统计叶子数
- 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
- 二叉树的操作:创建、遍历、求树的深度、叶子结点数
- 二叉树的字符串创建和遍历,求深度,叶子节点数
- 数据结构--二叉树的创建、先序遍历、中序遍历、后序遍历、深度、叶子结点数
- 【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
- 二叉树的创建以及四种遍历,叶子结点的数量,二叉树深度(简单二叉树)
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 二叉树的创建、遍历、深度、叶子节点个数
- C语言二叉树创建、遍历、深度、叶子节点
- 二叉树的各种实现(创建,叶子结点数,是否为堆,完全二叉树,二叉查找树,交换左右孩子)
- 如何将创作的app发布到苹果的app store上
- 保险软件运维工作中的规范性与灵活性之间的矛盾
- FTP信息代码大全
- sql语言种类
- 《传智特刊》十一期春节互动:程序员去哪儿? [
- 二叉树简单实现(创建、遍历、叶子数等)
- Ios 程序打包,安装流程
- C语言获取系统本地时间和修改本地时间
- Java 5.0多线程编程
- 黑马程序员_List集合容器
- Ubuntu 软件包管理详解
- UNDO段头块格式深度解析
- vim字符编码终极方案
- 2.thinkphp运行原理与配置