二叉树的递归遍历

原创 2018年04月15日 21:32:22
//按照先序遍历的方法建立一颗二叉树
include<iostream>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
typedef char  TElemType;
typedef int Status;
typedef struct BiTNode {
	TElemType data;
	struct BiTNode *lchild, *rchild, *parent;
}BiTNode, *BiTree;
Status PreOrderTree(BiTree T);
Status CreateBiTree(BiTree &T);//按先序次序输入二叉树中节点的值(一个字符),空格字符表示空数
Status PreOrderTraverse(BiTree T, Status(*PrintElement)(TElemType));//先序遍历
Status InOrderTraverse(BiTree T, Status(*PrintElement)(TElemType));//中序遍历
Status PostOrderTraverse(BiTree T, Status(*PrintElement)(TElemType));//后续遍历
Status PrintElement(TElemType e);
Status CreateBiTree(BiTree &T) {
	char ch = 0;
	ch = getchar();
	if (ch == '*')//*号代表节点为空
		T = NULL;
	else {
		if (!(T = (BiTree)malloc(sizeof(BiTNode))))
			exit(0);
		else {
			T->data = ch;
			CreateBiTree(T->lchild);
			CreateBiTree(T->rchild);
		}
	}
	return OK;

}

Status InOrderTraverse(BiTree T, Status(*PrintElement)(TElemType e)) {
	if (T) {
		if (InOrderTraverse(T->lchild, PrintElement))
			if (PrintElement(T->data))
				if (InOrderTraverse(T->rchild, PrintElement)) return OK;
		return ERROR;
	}
	else
		return OK;
}
Status PreOrderTraverse(BiTree T, Status(*PrintElement)(TElemType e)) {
	if (T) {
		if (PrintElement(T->data))
			if (PreOrderTraverse(T->lchild, PrintElement))
				if (PreOrderTraverse(T->rchild, PrintElement))return OK;
		return ERROR;
	}
	else
		return OK;
}
Status PostOrderTraverse(BiTree T, Status(*PrintElement)(TElemType e)) {
	if (T) {
		if (PostOrderTraverse(T->lchild, PrintElement))
			if (PostOrderTraverse(T->rchild, PrintElement))
				if (PrintElement(T->data))
					return OK;
		return ERROR;
	}
	else
		return OK;
}
Status  PrintElement(TElemType e) {
	printf("%2c", e);
	return OK;
}
int main()
{
	BiTree T;
	CreateBiTree(T);
	printf("先序遍历为:");
	PreOrderTraverse(T, PrintElement);
	printf("\n");
	printf("中序遍历是:");
	InOrderTraverse(T, PrintElement);
	printf("\n");
	printf("后续遍历是:");
	PostOrderTraverse(T, PrintElement);
	printf("\n");
	system("pause");
	return 0;
}

C++实现二叉树的递归遍历与非递归遍历

基本上所有关于二叉树的操作都是基于二叉树的遍历算法来实现的,因此在这里讲一下二叉树的遍历算法,其中包括递归与非递归算法,在算法中用输出节点数据来代替对节点的操作。 首先给出这样一棵数: 1、前序遍...
  • xuzhangze
  • xuzhangze
  • 2017-12-02 15:25:01
  • 180

二叉树遍历(递归)

二叉树又称为红黑树,是一种常用的数据结构,而二叉树的遍历则是一种非常基本的操作。遍历二叉树的方式有两大类:递归和非递归。递归方式算法较为简便,并且更便于理解,非递归方式则需要对二叉树的遍历次序有较为深...
  • qq1013598664
  • qq1013598664
  • 2016-09-03 17:04:01
  • 461

通过二叉树的遍历理解递归

通过前序遍历加深对于递归的理解
  • sinat_27088253
  • sinat_27088253
  • 2016-07-19 11:37:44
  • 2247

二叉树遍历的流程图(递归+非递归+前中后序)

  • 2011年11月05日 15:16
  • 34KB
  • 下载

二叉树遍历的递归实现图解

http://jsj.ccut.edu.cn/sjjgweb/index.php?option=com_content&task=view&id=685 二叉树的遍历是二叉树各种操作的基础,所以...
  • YEYUANGEN
  • YEYUANGEN
  • 2011-12-14 10:40:00
  • 2669

二叉树运算

  • 2012年08月28日 20:41
  • 522B
  • 下载

二叉树的遍历 二叉树的输出 递归和非递归实现 完美源代码 包括测试代码

  • 2009年11月01日 17:01
  • 349KB
  • 下载

递归二叉树建立和遍历及深度计算

上篇咱们说到二叉树的一种建立方法及三种遍历方法的递归非递归算法。这篇换了一种新的建立方法,用先根遍历递归的思路建立二叉树,用递归的方法计算深度,用中根递归和非递归方法遍历整个二叉树。 BinaryT...
  • jiang111_111shan
  • jiang111_111shan
  • 2015-06-09 21:15:58
  • 1070

数据结构 C++ STL 二叉树

  • 2011年01月21日 14:42
  • 971KB
  • 下载

【数据结构与算法】二叉树递归与非递归遍历(附完整源码)

二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但...
  • mmc_maodun
  • mmc_maodun
  • 2013-10-24 08:58:03
  • 41823
收藏助手
不良信息举报
您举报文章:二叉树的递归遍历
举报原因:
原因补充:

(最多只允许输入30个字)