数据结构——二叉树的双序遍历

本文介绍如何设计二叉树的双序遍历算法,它在访问每个节点时,先访问节点,然后按照双序遍历左子树,再次访问节点,最后遍历右子树。双序遍历可以视为中序遍历的变形。文章通过实例展示了算法的运行结果。

设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结
点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树
在这里插入图片描述

思路:
1.双序遍历与中序遍历类似,是中序遍历的变形

2.中序遍历是指对于二叉树的每一个结点来说,先中序遍历这个结
点的左子树,然后访问这个结点,接下来中序遍历它的右子树


二叉树的双序遍历的全部代码
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef int status;
typedef struct BiTNode{
	ElemType data;
	struct  BiTNode *lchild;
	struct  BiTNode *rchild;
}BiNode,*BiTree; 

void create_BiTree(BiTree &T)
{
	ElemType ch;
	scanf("%c",&ch);
	if(ch=='#')
		T=NULL;
	else
	{
		T=(BiTree)malloc(sizeof(BiNode));
		if(!T)
			exit(-1);
		T->data=ch;
		create_BiTree(T->lchild);
		create_BiTree(T->rchild);
	}	
}


void CreateBiTree(BiTree &T)//二叉树的先序创建 
{
	ElemType ch;
	scanf("%c",&ch);
	if(ch=='#')
		T=NULL;
	else 
	{
		T=(BiNode*)malloc(sizeof(BiNode));
		if(!T)
			exit(-1);
		T->data=ch;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}
void double_preorderTraverse(BiTree T)
{
	if(T!=NULL)
	{
		printf("%c ",T->data);
		double_preorderTraverse(T->lchild);
		printf("%c ",T->data);
		double_preorderTraverse(T->rchild);
	}
}

int main()
{
		BiTree T;
	printf("创建树输入树T的先序序列(其中使用#代表空节点)\n");
	create_BiTree(T);
	printf("双序遍历:");
	double_preorderTraverse(T);
}


例子:
在这里插入图片描述

运行结果:
在这里插入图片描述

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值