#法(先序遍历)创建二叉树

来源:互联网 发布:龙宫礼奈 知乎 编辑:程序博客网 时间:2024/06/05 21:04

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct BiTNode{char data;struct BiTNode *lchild, *rchild;}BiTNode;void inOrder1(BiTNode *T)//前序遍历{if (T == NULL){return;}printf("%c  ", T->data);inOrder1(T->lchild);inOrder1(T->rchild);}void inOrder2(BiTNode *T)//中序遍历{if (T == NULL){return;}inOrder2(T->lchild);    printf("%c  ", T->data);inOrder2(T->rchild);}void inOrder3(BiTNode *T)//后序遍历{if (T == NULL){return;}inOrder3(T->lchild);inOrder3(T->rchild);printf("%c  ", T->data);}/*#法创建二叉树原理:在二叉树中没有数据的节点用#填充,以确保二叉树是非#节点都有两个子节点*/BiTNode * CreateBiThrTree()//#法创建二叉树,递归思路{BiTNode *node = NULL;BiTNode *pL = NULL;BiTNode *pR = NULL;char ch;scanf("%c", &ch);if (ch == '#')//递归结束条件 碰到#则返回{return NULL;}else{node = (BiTNode *)malloc(sizeof(BiTNode));//创建节点memset(node, 0, sizeof(BiTNode));node->data = ch;pL = CreateBiThrTree();//创建左节点if (pL != NULL){node->lchild = pL;}else{node->lchild = NULL;}pR = CreateBiThrTree();//创建右节点if (pR != NULL){node->rchild = pR;}else{node->rchild = NULL;}}return node;}void main(){BiTNode *tmp = NULL;tmp = CreateBiThrTree();inOrder1(tmp);printf("\n");inOrder2(tmp);printf("\n");inOrder3(tmp);printf("\n");system("pause");}


0 0
原创粉丝点击