二叉树的常用操作

/*
二叉树
1、创建二叉树
2、先序遍历
3、中序遍历
4、后序遍历
5、二叉树的深度
6、二叉树的镜像
*/
#include "stdafx.h"
#include <iostream>
#include <queue>
#include <stdio.h>
using namespace std;
typedef struct BiNode  //声明二叉树
{
	char data;
	struct BiNode *lchild, *rchild;
}*BiTree,BiNode;
//按先序序列建立二叉树的二叉链表
BiTree CreateBiTree(BiTree &T) {  //引用传参(如果是指针就会报错)
	char ch;
	cin >> ch;
	if (ch==‘#‘) {
		T = NULL;
	}
	else {
		T = (BiTree )malloc(sizeof(BiNode));//申请动态内存
		T->data = ch;
		CreateBiTree(T->lchild);  //创建左子树
		CreateBiTree(T->rchild);  //创建右子树
	}
	return T;   //返回的根节点
}
//先序遍历
void PreOrder(BiTree T)
{
	if (T == NULL)
		return;
		cout << T->data <<" ";
	if(T->lchild!=NULL)
		PreOrder(T->lchild);
	if(T->rchild!=NULL)
		PreOrder(T->rchild);
}
//中序遍历
void MidOrder(BiTree T)
{
	if (T == NULL)
		return ;
	if (T->lchild != NULL)
		MidOrder(T->lchild);
	cout << T->data << " ";
	if (T->rchild)
		MidOrder(T->rchild);
}
//后序遍历
void PostOrder(BiTree T)
{
	if (T == NULL)
		return;
	if (T->lchild)
		PostOrder(T->lchild);
	if (T->rchild)
		PostOrder(T->rchild);
	cout << T->data <<" ";
}
//二叉树的深度
int TreeDepth(BiTree T)
{
	if (T == NULL)//如果根节点为空
		return 0;
	//如果T!=NULL至少深度为1
	int left = 1;
	int right = 1;
	left += TreeDepth(T->lchild);//求左子树的深度
	right += TreeDepth(T->rchild);//求右子树的深度
	return left > right ? left : right;
}
//二叉树的宽度(有一定难度)

//二叉树的镜像
void MirrorTree(BiTree T)
{
	if (T == NULL)  //根节点为空
		return ;
	if ((T->lchild == NULL) && (T->rchild == NULL))  //左右孩子都不为空(必须保证左右节点存在时交换左右孩子的指针)
		return;
	//交换根节点左右节点的的指针
	BiNode *temp = T->lchild;
	T->lchild = T->rchild;
	T->rchild = temp;
	if (T->lchild)
		MirrorTree(T->lchild);
	if (T->rchild)
		MirrorTree(T->rchild);
}

int main()
{
	BiTree root=NULL;
	root=CreateBiTree(root);//返回根节点的地址
	cout <<"先序遍历" << endl;
	PreOrder(root);
	cout <<endl<<"中序遍历"<<endl;
	MidOrder(root);
	cout <<endl<<"后序遍历" << endl;
	PostOrder(root);
	cout << endl;
	int treeDepth = TreeDepth(root);
	cout << "树的深度是:"<<treeDepth<<endl;
	MirrorTree(root);//二叉树的镜像
	PreOrder(root);//先序遍历
    return 0;
}

  

时间: 2024-11-09 21:41:23

二叉树的常用操作的相关文章

1 数据结构(13)_二叉树的概念及常用操作实现

1. 树到二叉树的转换 思考:通用树结构的实现太过复杂(树中每个结点都可以有任意多的孩子,具有多种形态),工程中很少会用到如此复杂的树是否可以简化呢?思路:减少树结点中孩子的数量.但这样树是否还能通用呢? 1.1.树的两种表示法 双亲孩子表示法:孩子兄弟表示法:孩子兄弟表示法的特点:1.能够表示任意的树形结构2.每个结点包含一个数据成员和两个指针成员3.孩子结点指针和兄弟结点指针构成"树杈" 2.2.二叉树 二叉树是由n(n>=0)个节点组成的有限集合,该集合或者为空,或者是由一

二叉树的性质和常用操作代码集合

二叉树的性质和常用操作代码集合 性质: 二叉树的性质和常用代码操作集合 性质1:在二叉树的第i层上至多有2^i-1个结点 性质2:深度为k的二叉树至多有2^k - 1个结点 性质3:对任意一棵二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0 = n2 + 1 满二叉树:深度为k且有2^-1个结点的树 完全二叉树:深度为k,结点数为n的二叉树,如果其结点1~n的位置序号分别与等高的满二叉树的结 点1~n的位置序号一一对应,则为完全二叉树. 性质4:具有n的结点的完全二叉树深度为lo

C++实现二叉搜索树的常用操作

实现操作 (1)二叉搜索树的建立 (2)二叉搜索树的插入 (3)二叉搜索树的三种递归遍历(前序.中序和后续) (4)二叉搜索树的三种非递归遍历(前序.中序和后续) (5)二叉搜索树的逐层打印 (6)搜索某一个字符(递归算法) (7)搜索一个字符(非递归算法) (8)查找最大元素 (9)查找最小元素 有时间再实现: (10)二叉搜索树的前驱和后继查找 (11)二叉搜索树的删除 源码分析: #include <iostream> #include <stack> #include &l

Python 字典的特点和常用操作

一.字典帮助文档 >>> dir(dict) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt

postgresql的ALTER常用操作

postgresql版本:psql (9.3.4) 1.增加一列ALTER TABLE table_name ADD column_name datatype; 2.删除一列 ALTER TABLE table_name DROP column_name; 3.更改列的数据类型 ALTER TABLE table_name ALTER column_name TYPE datatype; 4.表的重命名 ALTER TABLE table_name RENAME TO new_name; 5.更

Mysql数据库常用操作

1.备份数据库 [[email protected] ~]# mysqldump -h 192.168.0.8 -uroot  -p'123456'  user >user.sql 2.查看mysql数据库字符集设置 mysql> show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name            | Value    

二叉树的相关操作

#include<stdio.h> #include<malloc.h> #define MAXSIZE 20 typedef char TEelemtype; typedef struct BiTNode{ TEelemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //队列的方式 typedef struct queueelem { BiTNode* b[MAXSIZE]; int front,rear;

多路径软件常用操作(MPIO)

一:查看存储盘的路径 1. 查看MPIO的存储盘的路径 # lspath (适用于所有存储的MPIO路径查询) # mpio_get_config -Av (适用于DS3K/DS4K的MPIO路径查询) 2. 查看RDAC存储盘的路径 # fget_config -Av (适用于DS3K/DS4K的RDAC路径查询) 3.查看SDDPCM存储盘的路径 # pcmpath query device (适用于DS6K/DS8K和v7000的SDDPCM路径查询) 4. 查看当前操作系统自带的支持IB

Python学习笔记五:字符串常用操作,字典,三级菜单实例

字符串常用操作 7月19日,7月20日 ,7月22日,7月29日,8月29日,2月29日 首字母大写:a_str.capitalize() 统计字符串个数:a_str.count("x") 输出字符,不够的使用指定的字符补上,字符居中:a_str.center(50,"-") 判断字符串以什么结尾:a_str.endwith("xx") 将字符串中的tab转换为指定数目的空格:a_str.expandtabs(tabsize=30) 查找指定字符