leetcode--144--二叉树的前序遍历

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

示例:

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

输出: [1,2,3]

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

思路:
1、前序遍历就是根--左节点--右节点。因此递归的进行调用

Python代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):

    def __init__(self):
        self.ret = []

    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []

        if root.val:
            self.ret.append(root.val)
        if root.left:
            self.preorderTraversal(root.left)
        if root.right:
            self.preorderTraversal(root.right)

        return self.ret

C++代码:

/**
 * 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 ret;
    vector preorderTraversal(TreeNode* root) {
        
        if (root==nullptr) return ret;

        if (root->val) ret.push_back(root->val);
        if (root->left) preorderTraversal(root->left);
        if (root->right) preorderTraversal(root->right);

        return ret;
    }
};

思路2:
1、迭代的写法(非递归)
2、需要注意的是stack中先push right节点,然后再push left节点。这样从back pop的时候才能保证是前序遍历(根左右)的顺序

Python代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):

    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        ret = []

        stack = [root]

        while (stack):
            item = stack.pop()
            if item.val:
                ret.append(item.val)
            if item.right:
                stack.append(item.right)
            if item.left:
                stack.append(item.left)
        return ret

C++代码:

/**
 * 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 preorderTraversal(TreeNode* root) {
        vector ret;
        vector stack;
        if (root==nullptr) return ret;
        stack.push_back(root);

        while(stack.size()>0){
            auto item = stack.back();
            stack.pop_back();
            ret.push_back(item->val);
            if (item->right){
                stack.push_back(item->right);
            }
            if(item->left){
                stack.push_back(item->left);
            }
        }
        return ret;
    }
};

你可能感兴趣的:(leetcode--144--二叉树的前序遍历)