美文网首页算法
LeetCode题目3-前序遍历二叉树

LeetCode题目3-前序遍历二叉树

作者: 喝拿铁撸铁 | 来源:发表于2021-07-23 16:13 被阅读0次

二叉树的前序遍历

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

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

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

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

/**

 * 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 {

    List<Integer> treeList = new ArrayList<Integer>();

    public List<Integer> preorderTraversal(TreeNode root) {

        TreeNode cur = root;

        if (cur == null) {

            return treeList;

        }

        treeList.add(cur.val);

        if (cur.left != null) {

            preorderTraversal(cur.left);

        }

        if (cur.right != null) {

            preorderTraversal(cur.right);

        }

        return treeList;

    }

}

代码简化如下:

class Solution {

    private List<Integer> preorder(TreeNode node, List<Integer> list) {

        if (node == null) {

            return list;

        }

        list.add(node.val);

        preorder(node.left, list);

        preorder(node.right, list);

        return list;

    }

    public List<Integer> preorderTraversal(TreeNode root) {

        List<Integer> list = new ArrayList<Integer>();

        return preorder(root, list);

    }

}

// 迭代方法

class Solution {

    public List<Integer> preorderTraversal(TreeNode root) {

        List<Integer> list = new ArrayList<Integer>();

        if (root == null) {

            return list;

        }

        Deque<TreeNode> stack = new LinkedList<>();

        TreeNode node = root;

        while (!stack.isEmpty() || node != null) {

            while (node != null) {

                list.add(node.val);

                stack.push(node);

                node = node.left;

            }

            node = stack.pop();

            node = node.right;

        }

        return list;

    }

}

相关文章

网友评论

    本文标题:LeetCode题目3-前序遍历二叉树

    本文链接:https://www.haomeiwen.com/subject/tckpmltx.html