赞
踩
一、根据先序遍历字符序列创建一棵树,并输出树的先序、中序、后续遍历序列
代码:
- //按照先序遍历序列建立二叉树的二叉链表
- /*
- 1.从键盘输入二叉树的节点信息,建立二叉树的存储结构,左右孩子为空的用符号#表示;
- 2.在建立二叉树的过程中按照二叉树先序方式建立;
- */
- int CreateBiTree(BiTree &T){
- scanf("%c", &ch);
- if(ch == '#'){
- T=NULL;
- }else{
- if( !( T = (BiTNode *)malloc(sizeof(BiTNode)) ) ){ //生成根节点
- exit(0); //T=new BiTNode;
- }
- T->data = ch; //给新节点数据域赋值,生成根节点
- CreateBiTree(T->lchild); //构造左子树过程
- CreateBiTree(T->rchild); //构造右子树过程
- }
- return 1;
- }
完整代码:
输入为: ABC##DE#G##F###
- #include <stdio.h>
- #include <stdlib.h>
- #include<iostream>
- #define OK 1
- using namespace std;
- #define ElemType char
-
- //二叉树结构体的建立包括:数据域、左孩子指针、右孩子指针
- typedef struct BiTNode {
- char data;
- struct BiTNode* lchild, * rchild;
- }BiTNode, * BiTree;
-
- //先序建立二叉树
- BiTree CreateBiTree() {
- char ch;
- scanf_s("%c", &ch);
- BiTree T= nullptr;//本地指针 变量名称 可能已被使用,而不赋值。 这可能导致不可预知的结果。
- if (ch == '#')T = NULL;
- else {
- T = (BiTree)malloc(sizeof(BiTNode));
- T->data = ch;
- T->lchild = CreateBiTree();
- T->rchild = CreateBiTree();
- }
- return T;//返回根节点
- }
-
- //先序遍历二叉树
- void PreOrderTraverse(BiTree T) {
- if (T) {
- cout << T->data << " ";
- PreOrderTraverse(T->lchild);
- PreOrderTraverse(T->rchild);
- }
- }
-
- //中序遍历
- void InOrderTraverse(BiTree T) {
- if (T) {
- InOrderTraverse(T->lchild);
- cout << T->data << " ";
- InOrderTraverse(T->rchild);
- }
- }
- //后序遍历
- void PostOrderTraverse(BiTree T) {
- if (T) {
- PostOrderTraverse(T->lchild);
- PostOrderTraverse(T->rchild);
- cout << T->data << " ";
- }
- }
- int main() {
- BiTree T;
- T = CreateBiTree();//建立
- cout << "先序遍历结果:" << endl;
- PreOrderTraverse(T);
- cout << endl;
- cout << "中序遍历:" << endl;
- InOrderTraverse(T);//输出
- cout << endl;
- cout << "后序遍历:" << endl;
- PostOrderTraverse(T);
- cout << endl;
- system("pause");
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。