统一代码迭代法遍历二叉树

该文章介绍了一种使用栈进行树结构遍历的方法,通过在栈中插入空结点作为标记,可以灵活地处理中序遍历的不同顺序。主要步骤包括:遍历结点并插入空结点,遇到空结点时处理实际结点,根据栈顶元素是否为空判断是添加元素还是处理元素。
摘要由CSDN通过智能技术生成

day14

思路:

将所有遍历到的结点,都加入栈中。但当加入要处理的结点时,加完之后要加一个空结点,标记。

当加完之后遍历结点。只要遇见空结点。就说明空结点之后就是要处理的结点

注意:

1.要加入元素之前,记得要先把元素弹出。因为这个元素之后还要按照顺序再添加一次。所以需要弹出。

2.在处理元素之前,也就是遇见了空结点。要先将空结点弹出

3.判断是添加元素还是处理元素。需要查看栈顶元素是否为空,

为空就是处理元素(将栈顶弹出,将值存入res。)

不为空就是加入元素(先将之前的弹出,后依照顺序加入。记得 要加入空的结点

这样就能实现代码一致。

只需要调用几行代码,就可以得到不一样的遍历顺序结果。

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        stack<TreeNode*> st;
        vector<int> res;
        if (root != NULL) st.push(root);
        while(!st.empty())
        {   
            TreeNode* node = st.top();   
            if(node != NULL)
            {
                st.pop();       // 因为后面需要重复加入   中左右               
                if(node->right) st.push(node->right);
                if(node->left) st.push(node->left);
                st.push(node);
                st.push(NULL);              
                
            }
            else
            {
                st.pop();    //将空结点弹出
                node = st.top();
                st.pop();
                res.push_back(node->val);
            }
            
        }
        return res;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值