二叉树的创建与前序中序后序遍历的递归实现

本文详细介绍了使用C++实现二叉树的初始化、创建、销毁及三种遍历方式(前序、中序、后序),并通过输入示例演示了输出过程,清晰展示了二叉树的操作与应用。

一切都在代码里:

#include <iostream>

using namespace std;

typedef char Item;

typedef struct BTNode
{
	Item data;
	BTNode * lChild;
	BTNode * rChild;
}BTNode,*BTree;

void InitBTree(BTree *T);
void CreateBTree(BTree *T);
void DestroyBTree(BTree *T);
void PreOrderTraverse(BTree T);
void InOrderTraverse(BTree T);
void PostOrderTraverse(BTree T);

 
void Copy(Item *dest,Item *src);

void Copy(Item *dest,Item *src)
{
	*dest = *src;
} 
void InitBTree(BTree *T)
{
	*T = NULL;
}

void CreateBTree(BTree *T)
{
	Item item;
	cin>>item;
	if(item=='#')
	{
		*T = NULL;
	}
	else {
		*T = new BTNode;
		Copy(&((*T)->data),&item);
		CreateBTree(&((*T)->lChild));
		CreateBTree(&((*T)->rChild));
	}
}
void DestroyBTree(BTree *T)
{
	if(*T)
	{
		DestroyBTree(&((*T)->lChild));
		DestroyBTree(&((*T)->rChild));
		delete (*T);
		*T = NULL;
	}	
} 
void PreOrderTraverse(BTree T)
{
	if(T)
	{
		cout<<"node :"<<T->data<<endl;
		PreOrderTraverse(T->lChild);
		PreOrderTraverse(T->rChild);
	}
} 
void InOrderTraverse(BTree T)
{
	if(T)
	{
		InOrderTraverse(T->lChild);
		cout<<"node :"<<T->data<<endl;
		InOrderTraverse(T->rChild);
	}
} 
void PostOrderTraverse(BTree T)
{
	if(T)
	{
		PostOrderTraverse(T->lChild);
		PostOrderTraverse(T->rChild);
		cout<<"node :"<<T->data<<endl;
	}
} 
int main()
{
	BTree tree;
	InitBTree(&tree);
	CreateBTree(&tree);
	cout<<"Pre Order:"<<endl;
	PreOrderTraverse(tree);
	
	cout<<"In Order:"<<endl;
	InOrderTraverse(tree);
	
	cout<<"Post Order:"<<endl;
	PostOrderTraverse(tree);
	
	DestroyBTree(&tree);
	getchar();
} 

输入:

ABD##E##CF###
输出:

Pre Order:
node :A
node :B
node :D
node :E
node :C
node :F
In Order:
node :D
node :B
node :E
node :A
node :F
node :C
Post Order:
node :D
node :E
node :B
node :F
node :C
node :A



### 二叉树前序、中后序遍历递归实现 在Python中,可以使用递归方法实现二叉树前序、中后序遍历。以下是具体的实现代码: #### 前序遍历 前序遍历按照“根节点 -> 左子树 -> 右子树”的顺访问节点。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def preorderTraversal(root): """前序遍历""" if root is None: return [] result = [root.val] # 访问根节点 result += preorderTraversal(root.left) # 遍历左子树 result += preorderTraversal(root.right) # 遍历右子树 return result ``` #### 中序遍历序遍历按照“左子树 -> 根节点 -> 右子树”的顺访问节点。 ```python def inorderTraversal(root): """中序遍历""" if root is None: return [] result = [] result += inorderTraversal(root.left) # 遍历左子树 result.append(root.val) # 访问根节点 result += inorderTraversal(root.right) # 遍历右子树 return result ``` #### 后序遍历 后序遍历按照“左子树 -> 右子树 -> 根节点”的顺访问节点。 ```python def postorderTraversal(root): """后序遍历""" if root is None: return [] result = [] result += postorderTraversal(root.left) # 遍历左子树 result += postorderTraversal(root.right) # 遍历右子树 result.append(root.val) # 访问根节点 return result ``` 上述代码分别实现二叉树前序、中后序遍历[^1]。通过递归调用函数,可以依次访问每个节点,并将结果存储到列表中返回。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值