zoukankan      html  css  js  c++  java
  • leetcode 144. 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
        /
       3
    

    return [1,2,3].

    二叉树的前序遍历,非递归的写法考的比较多,方法很简单,就是把跟节点加进来,依次把右子树和左子树压入栈内,弹出的时候肯定是先弹出左子树,然后再弹出右子树,

    达到先遍历跟节点,再依次遍历左子树和右子树。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            Stack<TreeNode> stack = new Stack<TreeNode>();
            List<Integer> preorder = new ArrayList<Integer>();
            
            if (root == null) {
                return preorder;
            }
            
            stack.push(root);
            while (!stack.empty()) {
                TreeNode node = stack.pop();
                preorder.add(node.val);
                if (node.right != null) {
                    stack.push(node.right);
                }
                if (node.left != null) {
                    stack.push(node.left);
                }
            }
            return preorder;
        }
    }

    递归的方法

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

    先把root压栈来,

    栈非空进循环。

    弹栈进数组,

    右非空压栈,

    左非空压栈。

  • 相关阅读:
    作业题---设计一个类,求和的方法,求乘积的方法
    PHP-----预定义数组和数组的函数
    PHP-----指针遍历
    PHP------定义数组,取值数组和遍历数组
    PHP---------生成随机数,日期时间函数
    PHP的字符串处理
    PHP的正则表达式常用应用
    PHP的正则表达式
    PHP---函数
    PHP分页查询中的条件查询
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5766144.html
Copyright © 2011-2022 走看看