设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结
点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树
思路:
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);
}
例子:
运行结果: