用栈实现数的后序遍历

用栈实现数的后序遍历

void Postorder(BiTree T){
    Stack S; //用于记录根和字根结点
    InitStack(S);//初始化栈
    BiNode *p=T://临时变量记录记录当前访问的结点
    BiNode *r = NULL;//临时变量,记录上一个访问到的结点,因为从右边访问根结点必定是右子树已经遍历完了,此时上一个访问的结点必定是右子树的根结点
    while(p || !IsEmpty(S)){
        if(p!=NULL){
            push(S,p);
            p = p->lchild;
        }else{
            GetTop(S,p);//只读取根结点,不对栈内结点进行操作
            //没有对右子树进行操作过
            if(p->rchild != NULL && p->rchild != r){
                p = p->rchild;
                push(S,p);
                p = p->lchild;
            }else{
                pop(S,p);
                visit(p);//对p进行访问,可以进行打印等操作
                r = p;//记录当前访问的是p结点
                p == NULL;//把p置空,进入下一次循环,直到栈内无元素,且p为空时遍历完成
            }//else    
        }//else
    }//while
}

弱智icoding nmsl

#include <stdio.h>
#include "bitree.h" //请不要删除,否则检查不通过

bool path(BiTNode* root, BiTNode* node, Stack* s){
    BiTNode *r = NULL;
    if (root == NULL || node == NULL) return false;
    while(root || !is_empty(s)){
        if(root != NULL){
            push(s,root);
            if(root == node) return true;
            root = root->left;
        }else{
            top(s,&root);
            if(root->right != NULL && root->right != r){
                root = root->right;
            }else{
                pop(s,&root);
                r = root;
                root = NULL;
            }//else    
        }//else
    }//while
    return false;
}

最精简的树的后序遍历版本

#include <stdlib.h>
#include <stdio.h>
#include "bitree.h" //请不要删除,否则检查不通过

bool path(BiTNode* root, BiTNode* node, Stack* s){
    BiTNode *r = NULL;
    if (root == NULL || node == NULL) return false;
    while(root || !is_empty(s)){
        while(root != NULL){
            push(s,root);
            if(root == node) return true;
            root = root->left;
        }
            top(s,&root);
            if(root->right == NULL || root->right == r){
                pop(s,&root);
                r = root;
                root = NULL;
            }else{
               root = root->right;
            }//else    
    }//while
    return false;
}
posted @   陳51r  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示