leetcode 144 二叉树的前序遍历(非递归)

二叉树?前序遍历!

题目:
给定一个二叉树,返回它的 前序 遍历。

例子:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]

题目分析

前序遍历
  • 根结点
  • 左子树
  • 右子树

递归三行解决
不使用递归? 保存结点信息 即可!

解题思路

变量 作用
stack < Treenode * > s 保存结点信息
TreeNode * temp 当前遍历的结点\

过程:
当 s 非空
取出栈顶元素作为当前结点 temp
如果当前结点 右子树节点 非空 ==> 入栈
如果当前结点 左子树节点 非空 ==> 入栈
(栈后入先出 – 所以 加右结点 加左节点)

代码如下:

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        if (!root) return {};
        vector<int> ans;
        stack<TreeNode*> s{{root}};
        while (!s.empty())
        {
            TreeNode* temp;
            temp = s.top();
            s.pop();
            ans.push_back(temp->val);
            if (temp->right) s.push(temp->right);    //右节点入栈
            if (temp->left) s.push(temp->left);        //左结点入栈
        }
        return ans;
    }
};
发布了34 篇原创文章 · 获赞 0 · 访问量 586

猜你喜欢

转载自blog.csdn.net/Luyoom/article/details/103940467