/*
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=
二叉树常用操作(创建、查找、求高度、遍历、打印)
最新推荐文章于 2023-05-03 16:04:20 发布