二叉树的中序遍历

递归模板(简单)#

基本思路:访问入口函数,放在两个递归函数之间#

void InOrder(BiTree T){
    if(T != NULL){        
        InOrder(T->lchild);
        visit(T);
        InOrder(T->rchild);
    }
}

非递归模板(效率高)#

基本思路:#

  • 初始化一个栈,从根结点遍历左孩子一直到树叶,全部压入栈#

  • 判断栈不为空,输出栈顶结点,然后从输出的当前结点的右孩子开始遍历#

  • 重复以上步骤直到栈为空或者子树为空#

复制代码
// 中序遍历模板
void InOrderNonrecursion(BTNode *bt){
    if(bt != NULL){        
        BTNode *Stack[maxSize];           // 初始化栈
        int top = -1;
        BTNode *p;
        p = bt;
        while(top != -1 || p != NULL){    // 空栈而且子树遍历完结束循环
            while(p != NULL){             // 左孩子不为空,左孩子进栈,一直到左孩子为空
                Stack[++top] = p;        
                p = p->lchild;
            }
            if(top != -1){                // 若堆栈不空,出栈并输出出栈结点,访问节点,将p指向右孩子
                p = Stack[top--];
                Visit(p);                 
                p = p->rchild;
            }                
        }
    }
}
复制代码
posted @   BigBender  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
主题色彩