zoukankan      html  css  js  c++  java
  • 数据结构 二叉树的非递归遍历算法再回顾

    这里主要回顾后序遍历算法的主要非递归思想:

    后序遍历可以由前序遍历经过一系列操作推得

    如图:

    该二叉树的前序遍历为:1 2 4 8 5 9 3 6 10 11 7 12 13

    首先找到根节点的左右两边的子树分别以2和3为根,将2和3为根的子树全部按原顺序交换

    所以是2 4 8 5 9和3 6 10 11 7 12 13整体交换可以得到

    1 3 6 10 11 7 12 13 2 4 8 5 9 接着交换以4,5,6,7为根的子树(这里特别注意!若子树的孩子节点只有一个则可以不用交换)

    得到:

    1 3 7 13 12 6 11 10 2 5 9 4 8

    最后将整个序列全部反转,这里我用到的是将这个序列放入一个栈中,然后再出栈就可以起到逆序的作用了

    8 4 9 5 2 10 11 6 12 13 7 3 1

    代码可写为:

    void post_order_Nonrecursion(Node *node)
    {
        if(node!=NULL)
        {
            Node *stack1[MAXSIZE];int top1=-1;
            Node *stack2[MAXSIZE];int top2=-1;
            Node *p=NULL;
            
            stack1[++top1]=node;
            while(top1!=-1)
            {
                p=stack1[top1--];
                stack2[++top2]=p;
                if(p->left!=NULL)
                    stack1[++top1]=p->left;
                if(p->right!=NULL)
                    stack1[++top1]=p->right;
            }
            while(top2!=-1)
            {
                p=stack2[top2--];
                printf("%d	",p->data);
            }
        }
    }
  • 相关阅读:
    JSP基础语法:注释、Scriptlet、编译指令
    JDBC的LIKE书写规范
    AWT回顾篇
    1.五子棋预备知识
    对象的生命周期回顾篇
    学习activemq(2)写个简单的程序
    activemq in action(3)剖析JMS消息(转)
    activemq in action(1)
    学习activemq(3)
    hadhoop安装
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13790223.html
Copyright © 2011-2022 走看看