二叉树的建立与遍历(包含非递归方式)

最近在学习数据结构与c++语言,学到了树的这一章。学习了二叉树的创建与遍历,特此做一个小的总结。水平有限请多包涵。

c++自己实现了列栈和队列与线性表结构,分别是stack、deque、list。

 

数据的逻辑结构
	1.线性结构
		1.1线性表
		1.2栈(特殊线性表,先进后出)
		1.3队列(特殊线性表,先进先出)
		1.4字符串、数组、广义表

	2.非线机构
		2.1树形结构(一对多)
		2.2图形结构(多对多)

 

#include <bits/stdc++.h>
using namespace std;
typedef  char Elemtype;
typedef struct BitNode{		//树节点 
	Elemtype data;
	BitNode *lchild,*rchild;
}BitNode,*BitTree;
/**
	二维指针
	前序插入初始化 
*/ 
void createBiTree(BitTree *tree){
	char c;
	scanf("%c",&c);
	if(c=='#'){
		*tree=NULL;
	}else{
		*tree=new BitNode;	//分配指针存储空间 
		(*tree)->data=c;
		createBiTree(&(*tree)->lchild);
		createBiTree(&(*tree)->rchild);
	}
}
/**
	递归遍历(中序) 
*/
void printBiTree(BitTree &p){
	if(p){
		printBiTree(p->lchild);
		printf("%c",p->data);
		printBiTree(p->rchild);
	}
}
/**
	非递归遍历,中序 
	(1)建立一个栈
	(2)根节点进栈,遍历左子树
	(3)根节点出栈,输出根结点,遍历右子树 
*/
void printBiTree2(BitTree &p){
	stack<BitTree> stk;
	BitTree node=new BitNode;	//分配内存 
	while(p||!stk.empty()){
		if(p!=NULL){			//入栈 
			node=p;
			stk.push(node);
			p=p->lchild;
		}else{					//出栈 
			node=stk.top();
			printf("%c",node->data);
			stk.pop();
			p=node->rchild;
		}
	}
}
int main(){
	BitNode *p=NULL;
	createBiTree(&p);
	printBiTree(p);			//递归 
	cout<<endl; 
	printBiTree2(p);		//非递归(栈) 
	return 0;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值