一步两步学算法之树的后序遍历 非递归实现

之前发过一篇博文  代码未测试直接发出来  被 @hoodlum1980

指出有错误 深表惭愧

参考了他的一篇关于后序遍历的文章

http://www.cnblogs.com/hoodlum1980/p/3901359.html   这是他的博文地址

又写了一遍代码  经测试通过

这个比较容易理解  给你一棵树 遍历每个节点 看它的左右儿子是否为空  若都为空或者flag都为1  则输出

flag为1的意思 就是之前已经输出了

详细看代码

 1 typedef struct bintre
 2 {
 3     int data;
 4     struct bintre *left;
 5     struct bintre *right;
 6     int flag;
 7 }BinTree;
 8
 9 typedef struct
10 {
11     BinTree *link;
12 }stacktype;
13
14 void  TravelTree(BinTree *bt)
15 {
16     stacktype stack[30];
17     int top=0;
18     BinTree *p;
19     p=bt;
20     stack[top].link=p;
21     while(top>=0)
22     {
23         if(p->left!=NULL && p->left->flag!=1)        //看左儿子是否为空 或者 已输出
24         {
25             top++;
26             p=p->left;
27             stack[top].link=p;
28             continue;
29         }
30
31         if(p->right!=NULL && p->right->flag!=1)        //看右儿子是否为空 或者 已输出
32         {
33             top++;
34             p=p->right;
35             stack[top].link=p;
36             continue;
37         }
38
39
40         printf("%d ",stack[top].link->data);
41         p->flag=1;
42         top--;
43         p=stack[top].link;
44
45     }
46 }
时间: 2024-10-11 04:05:20

一步两步学算法之树的后序遍历 非递归实现的相关文章

二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)

1 typedef struct TreeNode *BinTree; 2 typedef BinTree Position; 3 struct TreeNode{ 4 ElementType Data; 5 BinTree Left; 6 BinTree Right; 7 }; 8 BinTree BT; 9 void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法(使用堆栈,用循环实现) 10 { 11 BinTree T=BT; 12 Stack S=C

微软算法100题09 判断整数序列是不是二元查找树的后序遍历结果

9. 判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false.例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回true.如果输入7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回false. 思路:如果一个数组为BST的后序遍历结果 则最后一个元素必然为该BST的根节点 因为BST的特性是左子树必然全部小

IT公司100题-9-判断整数序列是不是二元查找树的后序遍历结果

问题描述: 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入4, 8, 6, 12, 16, 14, 10,由于这一整数序列是如下树的后序遍历结果: 10/     \6      14/  \    /   \4   8 12    16 因此返回true. 如果输入6, 5, 8, 5, 7 ,则返回false. 分析: 在后续遍历得到的序列中,最后一个元素为树的根结点.根节点元素将数组分为两部分,左边都小于根节点,右边都大

9判断整数序列是不是二元查找树的后序遍历结果

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4252095.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 解题思路: 1.输入一个整型数组a,根据该数组创建二

6.二元查找树的后序遍历结果

http://zhedahht.blog.163.com/blog/static/25411174200725319627/ 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8       /  \      6    10    / \    / \   5   7   9  11 因此返回true. 如果输入7.4.6.5,没有哪棵树的后序遍历的结

【编程题目】判断整数序列是不是二元查找树的后序遍历结果,如果是,构建该二元查找树

判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回 true,否则返回 false.例如输入 5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回 true.如果输入 7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回 false. 做这个题目的时候最开始傻了,想着从前到后根据数字的大小关系判断.后来幡然醒悟,根据后序遍历的特点.序列最后一

Java数据结构系列之——树(5):二叉树的后序遍历的递归与非递归实现

package tree.binarytree; import java.util.Stack; /** * 二叉树后序遍历的递归与非递归实现 * * @author wl * */ public class BitreePostOrder { // 后序遍历的递归实现 public static void biTreePostOrderByRecursion(BiTreeNode root) { if (root == null) { return; } biTreePostOrderByRe

第9题:判断整数序列是不是二元查找树的后序遍历结果

欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/44872143 第9题:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 因此返回true. 如果输入7.4.6.5,没有哪棵树的后序遍历的结果是这个序列,因此返回false. 由于二叉查找树的特性(左子树的值小于根节点,右子树的值

算法学习 - 树的三种遍历(递归实现)先序遍历,中序遍历,后序遍历

树的遍历 这三种遍历方法其实都很简单的,举例来说: a / b c 这个是例子下面讲下这三个是如何遍历的. struct TreeNode; typedef TreeNode* Node; typedef int EleType; struct TreeNode{ Node lchild; Node rchild; EleType data; }; 先序遍历 先序遍历,就是从上到下,从左到右,遇到一个就遍历,上面这个例子遍历的序列就是:a b c 递归代码如下: void PreOrderTre