关于后序递归建二叉树的方法

最简单的一种方法就是逆向输入,然后采用“根右左 ”的顺序建立二叉树

 *********************************/

/**//**********Gamesduan*********/

/**//**********BiTreeInLast*********/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
int n=0;

typedef struct bitnode...{  //树结构
 char data;
 struct bitnode *lchild,*rchild;
}bitnode;

bitnode *CreateBiTreeInPre() //先序递归建树
{
 bitnode *m;
 char ch;
 scanf("%c",&ch);
 if(ch==' ') m=NULL;
 else
 {
  if(!(m=(bitnode *)malloc(sizeof(bitnode))))
   exit(0);
  m->data=ch;
  m->lchild=CreateBiTreeInPre();
  m->rchild=CreateBiTreeInPre();
 }
 return m;
}

bitnode *CreateBiTreeInLast1() //第一种方法,用倒序输入的方式进行输入,输入为“c空b空空”
 {
 bitnode *T;
 char ch;
 scanf("%c",&ch);
 if(ch==' ')
  T=NULL;
 else
 {
  T=(bitnode *)malloc(sizeof(bitnode));
  T->data=ch;
  T->rchild=CreateBiTreeInLast2(); //先创建右子树
  T->lchild=CreateBiTreeInLast2(); //再创建左子树
 }
 return T;
}

void preorder(bitnode *t) //先序递归输出
{
 if(t!=NULL)
 {
  printf("%c ",t->data);
  preorder(t->lchild);
  preorder(t->rchild);
 }
}

void main()
{
 bitnode *t=new bitnode;
 //t=CreateBiTreeInPre(); //先序
 t=CreateBiTreeInLast1(); //后序1
 preorder(t);
 }

时间: 2024-11-02 12:18:01

关于后序递归建二叉树的方法的相关文章

判断整数序列是否为二元查找树的后序遍历结果的解决方法_C 语言

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false.例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果.    8    / \  6   10 / \    / \ 5  7 9 11因此返回true.如果输入7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回false.本题网上已经有用递归单纯判断的解法. 个人解法: 先得到序列对应的中序序列, 然后看中序序列是否从小到大有序, 得出判断. 相比

有关后序非递归遍历二叉树的问题

问题描述 有关后序非递归遍历二叉树的问题 void show_LRD(tree LRD) { //后序非递归遍历二叉树 int otherstack[max];//辅助栈,用于检测出栈时是否已经遍历右子树 int *othertop,*otherbottom; tree temp; othertop=otherbottom=otherstack; while(LRD||!emptystack()) { while(LRD) { while(LRD) { inputstack(LRD); *oth

c语言版本二叉树基本操作示例(先序 递归 非递归)_C 语言

复制代码 代码如下: 请按先序遍历输入二叉树元素(每个结点一个字符,空结点为'='):ABD==E==CF==G== 先序递归遍历:A B D E C F G中序递归遍历:D B E A F C G后序递归遍历:D E B F G C A层序递归遍历:ABCDEFG先序非递归遍历:A B D E C F G中序非递归遍历:D B E A F C G后序非递归遍历:D E B F G C A深度:请按任意键继续. . . 复制代码 代码如下: #include<stdio.h>#include&

PHP实现的线索二叉树及二叉树遍历方法详解_php技巧

本文实例讲述了PHP实现的线索二叉树及二叉树遍历方法.分享给大家供大家参考,具体如下: <?php require 'biTree.php'; $str = 'ko#be8#tr####acy#####'; $tree = new BiTree($str); $tree->createThreadTree(); echo $tree->threadList() . "\n";从第一个结点开始遍历线索二叉树 echo $tree->threadListReserv

中序遍历-为什么二叉树的中序非递归算法无法实现

问题描述 为什么二叉树的中序非递归算法无法实现 // 实验三.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include using namespace std; #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef char TElemType; typedef int Stat

C++非递归建立二叉树实例_C 语言

本文实例讲述了C++非递归建立二叉树的方法.分享给大家供大家参考.具体分析如下: 思路: 设置一个标记变量flag并初始化为1. flag = 1表示现在需要创建当前结点的左孩子,2表示需要创建右孩子,3则表示当前结点的左右孩子都已经创建完毕,需要执行出栈操作,直到当前结点不是父结点的右孩子为止. 以先序创建如图所示二杈树: 实现代码: PBTree create() { char ch[20]; scanf("%s",ch); int len = strlen(ch); PBTree

二叉树的非递归后序遍历算法案例解析

 这篇文章主要介绍了二叉树的非递归后序遍历算法实例,需要的朋友可以参考下 前序.中序.后序的非递归遍历中,要数后序最为麻烦,如果只在栈中保留指向结点的指针,那是不够的,必须有一些额外的信息存放在栈中. 方法有很多,这里只举一种,先定义栈结点的数据结构    代码如下: typedef struct{Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过.   lastOrderTraverse(Bi

二叉树的非递归后序遍历算法实例

 这篇文章主要介绍了二叉树的非递归后序遍历算法实例,需要的朋友可以参考下 前序.中序.后序的非递归遍历中,要数后序最为麻烦,如果只在栈中保留指向结点的指针,那是不够的,必须有一些额外的信息存放在栈中. 方法有很多,这里只举一种,先定义栈结点的数据结构    代码如下: typedef struct{Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过.   lastOrderTraverse(Bi

二叉树的遍历详解(前序中序后序层次-递归和非递归)

二叉树 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁.而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现.在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点 前序遍历 前序遍历按照"根结点-左孩子-右孩子"的顺序进行访问. 递归实现 void PreOrder(Tree