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

思路:
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);
}
例子:

运行结果:

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





