zoukankan      html  css  js  c++  java
  • 144. Binary Tree Preorder Traversal (二叉树前序遍历)



    Given a binary tree, return the preorder traversal of its nodes' values.

    For example:
    Given binary tree [1,null,2,3],

       1
        
         2
        /
       3
    

    return [1,2,3].

    Note: Recursive solution is trivial, could you do it iteratively?

    递归 :

     1 class Solution {
     2     private List<Integer> res = new ArrayList<Integer>();
     3     public List<Integer> preorderTraversal(TreeNode root) {
     4         help(root);
     5         return res;
     6     }
     7     private void help(TreeNode root){
     8         if(root == null) return ;
     9         res.add(root.val);
    10         help(root.left);
    11         help(root.right);
    12     }
    13 }

    非递归:

    终极版:

     1 class Solution {
     2     public List<Integer> preorderTraversal(TreeNode root) {
     3         Stack<TreeNode> s =  new Stack<TreeNode>();
     4         List<Integer> res = new ArrayList<Integer>();
     5         while(root!=null||!s.isEmpty()){
     6             while(root!=null){
     7                 s.push(root);
     8                 res.add(root.val);
     9                 root = root.left;
    10             }
    11             if(!s.isEmpty()){
    12                 root = s.pop();
    13                 root = root.right;
    14             }
    15         }
    16         return res;
    17     }
    18 }
     1 class Solution {   
     2     public List<Integer> preorderTraversal(TreeNode root) {
     3         List<Integer> res = new ArrayList<Integer>();
     4         
     5         //用stack 来保存 右子树
     6         Stack<TreeNode> stack = new Stack<TreeNode>();
     7         TreeNode cur = root;
     8         while(cur!=null || !stack.isEmpty()){
     9             while(cur!=null){
    10                 res.add(cur.val);
    11                 stack.add(cur.right);
    12                 cur = cur.left;
    13             }
    14             cur = stack.pop();
    15         }
    16         return res;
    17     }   
    18 }

     20180320

    用stack 保存右节点跟左节点

     1 class Solution {
     2     public List<Integer> preorderTraversal(TreeNode root) {
     3         List<Integer> res = new ArrayList<Integer>();
     4         Stack<TreeNode> stack = new Stack();
     5         stack.push(root);
     6         while(!stack.isEmpty()){
     7             root = stack.pop();
     8             if (root!=null){
     9             res.add(root.val);
    10             stack.push(root.right);
    11             stack.push(root.left);
    12             }
    13         }
    14         return res;
    15     }
    16 }
  • 相关阅读:
    Java数据结构——栈
    Java排序算法——插入排序
    Java排序算法——选择排序
    Java排序算法——冒泡排序
    Java查找算法——二分查找
    负载 压测 概念
    在线压力测试,测试网站并发量
    Jmeter如何把响应数据的结果保存到本地的一个文件
    性能测试之压力机瓶颈分析及优化
    系统吞吐量(TPS)、用户并发量、性能测试概念和公式
  • 原文地址:https://www.cnblogs.com/zle1992/p/8387902.html
Copyright © 2011-2022 走看看