二叉树遍历 [前、中、后] x [递归,迭代]

 

遍历

1. 递归法 -- 前序遍历 (中序、后序类似) 

void pre_order(TreeNode *node){
    if(node!=nullptr){
        cout<<node->data;        //根
        pre_order(node->left);    //左
        pre_order(node->right);    //右
    }
}

 2. 循环法 -- 前序遍历

#include<stack>
void pre_order(TreeNode *node){
    stack<TreeNode*> st;
    while(node!=nullptr||!st.empty()){
        if(node!=nullptr){            //节点存在时
            cout<<node->data;           //输出根
            st.push(node);              //根节点存入栈
            node=node->left;            //指向左节点
        }
        else{
            TreeNode *parent=st.top();          //左节点不存在时,指向根右节点
            st.pop();
            node=parent->right;}
    }
}

中序遍历

#include<stack>
void in_order(TreeNode *node){
    stack<TreeNode*> st;
    while(node!=nullptr||!st.empty()){
        if(node!=nullptr){            //节点存在时
            st.push(node);              //根节点存入栈
            node=node->left;            //指向左节点
        }
        else{
            TreeNode *parent=st.top();     //左节点不存在时,指向根右节点
            cout<<parent->data;           //输出根
            st.pop();
            node=parent->right;}
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值