【LeetCode】144 . Binary Tree Preorder Traversal 解题报告

来源:互联网 发布:手机淘宝的积分在哪看 编辑:程序博客网 时间:2024/06/06 07:47

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477948


Subject

出处:https://leetcode.com/problems/binary-tree-preorder-traversal/

 Given a binary tree, return the preorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3},   1    \     2    /   3return [1,2,3].

Explain

该题目的意思就是先序遍历二叉树,保存结点值到list集合中返回。


Solution

先序遍历二叉树一般就是分为递归方式和非递归方式。

solution 1

递归方式

    public List<Integer> list = new ArrayList<Integer>();    /**     * 先序遍历二叉树     *      * @param root     * @return     */    public List<Integer> preorderTraversal(TreeNode root) {        preOrder(root);        return list;    }    /**     * 递归方式     *      * @param node     */    public void preOrder(TreeNode node) {        if (node == null) {            return;        }        list.add(node.val);        if (node.left != null) {            preOrder(node.left);        }        if (node.right != null) {            preOrder(node.right);        }    }

solution 2

非递归方式

通过来存储结点。

    /**     * 非递归方式     *      * @param root     * @return     */    public List<Integer> preorderTraversal2(TreeNode root) {        if (root == null) {            return list;        }        Stack<TreeNode> stack = new Stack<>();        stack.push(root);        TreeNode tempNode = null;        while (!stack.isEmpty()) {            tempNode = stack.pop();            list.add(tempNode.val);            if (tempNode.right != null) {                stack.push(tempNode.right);            }            if (tempNode.left != null) {                stack.push(tempNode.left);            }        }        return list;    }

关于二叉树的遍历分为以下四种:

  • 先序遍历

  • 中序遍历

  • 后序遍历

  • 层序遍历

其中先序、中序、后序遍历又分别有递归方式和非递归方式。


so easy~~

1 0
原创粉丝点击