首页 > 其他 > 详细

二叉树的中序遍历

时间:2019-12-25 09:41:18      阅读:98      评论:0      收藏:0      [点我收藏+]

递归模板(简单)

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

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;
            }                
        }
    }
}

二叉树的中序遍历

原文:https://www.cnblogs.com/YC-L/p/12094679.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!