二叉树常用操作(创建、查找、求高度、遍历、打印)

/*
Author:Ibsen
Data:2015.12.15
*/

//二叉树创建、查找、求高度、7种遍历、打印输出

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M=1000; //定义节点最大值

//定义链式存储结构
typedef struct node
{
	char data; //数据元素
	struct node *lc; //左孩子节点
	struct node *rc; //右孩子节点
}BTree;
char str[M]; //括号表示法存放二叉树

/*========================
创建二叉树
假设采用括号表示法表示的二叉树字符串str正确,用ch扫描str只有四种字符串:
1.若ch=='(':表示前面刚创建的节点*p存在孩子节点,将其进栈,然后开始处理孩子节点,置k=1,表示其后创建的是左孩子节点;
2.若ch==')':表示以栈顶节点为根结点的子树创建完毕,将其退栈;
3.若ch==',':表示开始处理栈顶节点的右孩子节点;
4.其他情况:只能是单个字符,表示要创建一个节点*p,根据k值建立与栈顶节点之间的关系:k==1表示该节点是栈顶节点的左孩子节点,k==2表示右孩子节点;
===========================*/
void Creat_BTree(BTree* &h,char *str)
{
	BTree *st[M]; //保存双亲节点
	int top=-1; //栈顶指针
	int k,pos=0; //pos表示处理到的str位置
	BTree *p;
	char ch;
	h=NULL; //初始化二叉树
	ch=str[pos];
	while(ch!='\0')
	{
		switch(ch)
		{
			case '(': st[++top]=p; k=1; break; //开始处理左孩子
			case ')': top--; break;
			case ',': k=2; break; //开始处理右孩子
			default: p=new BTree();
					 p->data=ch;
					 p->lc=p->rc=NULL;
					 if(h=
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值