144. 二叉树的前序遍历

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

 示例:

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

输出: [1,2,3]


链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal

前序遍历的顺序是根-左-右

思路是:

  1. 先将根结点入栈

  2. 出栈一个元素,将右节点和左节点依次入栈

  3. 重复 2 的步骤

总结: 典型的递归数据结构,典型的用栈来简化操作的算法。

递归:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>v;
        vector<TreeNode*>s;
        while(root!=NULL||!s.empty()){
            while(root!=NULL){
                v.push_back(root->val);
                s.push_back(root);
                root=root->left;
            }
            root=s.back()->right;
            s.pop_back();
        }
        return v;
    }
};

 

 

class Solution(object):
    def preorderTraversal(self, root):
        if not root:return []
        stack, res = [root], []
        while stack:
            root = stack.pop()
            if root:
                res.append(root.val)
                if root.right:
                    stack.append(root.right)
                if root.left:
                    stack.append(root.left)
        return res

 

posted @ 2020-07-09 16:16  XXXSANS  阅读(160)  评论(0编辑  收藏  举报