zoukankan      html  css  js  c++  java
  • 144. Binary Tree Preorder Traversal(非递归实现二叉树的前序遍历)

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

    Example:

    Input: [1,null,2,3]
       1
        
         2
        /
       3
    
    Output: [1,2,3]
    

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

    方法一:递归

    思路很简单,根左右

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void preorderTraversal(TreeNode root) {
            if(root==null) return ;
            System.out.print(root.val+' ');
            preorderTraversal(root.left);
            preorderTraversal(root.right);
        }
    }

    方法二:迭代

    所有用递归的题都能用迭代解,递归无非是利用系统的函数栈,如果自己申请数据结构来代替函数栈,也能实现相同功能。

    前序遍历是根左右,根先加入栈中,再弹出,每次弹出时,将弹出结点的右左子树加入,保证弹出的顺序是根左右。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            if(root==null) return null;
            if(root!=null) {
                Stack<TreeNode> stack=new Stack<TreeNode>();
                List<Integer> list=new ArrayList<Integer>();
                stack.add(root);
                while (!stack.isEmpty()){
                    root=stack.pop();
                    list.add(root.val);
                    if(root.right!=null) {
                        stack.add(root.right);
                    }
                    if(root.left!=null){
                        stack.add(root.left);
                    }
                }
            }
            return list;
        }
    }
    苟有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。
  • 相关阅读:
    Hadoop IO
    HDFS
    简介
    队列
    classLoader和Class.forName的区别
    String为什么是final类型的
    Fabric
    超级账本——面向企业的分布式账本
    以太坊
    pycharm破解教程
  • 原文地址:https://www.cnblogs.com/shaer/p/10670108.html
Copyright © 2011-2022 走看看