LeetCode144. 二叉树的前序遍历

问题描述

原文链接:144. 二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的前序遍历。

示例 1:

img

输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

示例 4:

img

输入:root = [1,2]
输出:[1,2]

示例 5:

img

输入:root = [1,null,2]
输出:[1,2]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

代码实现

Java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        if(root == null){
            return new ArrayList<>();
        }

        Stack<TreeNode> stack = new Stack();
        List<Integer> res = new ArrayList();

        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode temp = stack.pop();
            res.add(temp.val);
            if(temp.right != null){
                stack.push(temp.right);
            }

            if(temp.left != null){
                stack.push(temp.left);
            }
        }

        return res;
    }
}
Java

Python

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

        stack = []
        res = []

        stack.append(root)
        while len(stack) > 0:
            temp = stack.pop()
            res.append(temp.val)
            if temp.right:
                stack.append(temp.right)

            if temp.left:
                stack.append(temp.left)

        return res

Python

C++

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        if(!root){
            return {};
        }

        stack<TreeNode*> st;
        vector<int> res;

        st.push(root);
        while(!st.empty()){
            TreeNode* temp = st.top();
            st.pop();
            res.push_back(temp->val);
            if(temp->right){
                st.push(temp->right);
            }

            if(temp->left){
                st.push(temp->left);
            }
        }

        return res;
    }
};

C++

Go

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    if root == nil{
        return []int{}
    }

    var stack []*TreeNode
    var res []int

    stack = append(stack, root)
    for len(stack) > 0{
        temp := stack[len(stack)-1]
        stack = stack[:len(stack)-1]
        res = append(res, temp.Val)
        if temp.Right != nil{
            stack = append(stack, temp.Right)
        }

        if temp.Left != nil{
            stack = append(stack, temp.Left)
        }
    }

    return res
}

Go

发表评论

后才能评论