• [leetcode] 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].

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

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

    思路1:递归写法。

    思路2:非递归写法,有待统一整理。

    public class Solution {
        public ArrayList<Integer> preorderTraversal(TreeNode root) {
            ArrayList<Integer> result = new ArrayList<Integer>();
            if(root==null)
                return result;
            preTravel(root, result);
            return result;
        }
    
        private void preTravel(TreeNode node, ArrayList<Integer> result) {
            result.add(node.val);
            if (node.left != null)
                preTravel(node.left, result);
            if (node.right != null)
                preTravel(node.right, result);
        }
    
        public static void main(String[] args) {
            TreeNode root = new TreeNode(1);
            root.right = new TreeNode(2);
            root.right.left = new TreeNode(3);
    
            System.out.println(new Solution().preorderTraversal(root));
        }
    
    }

    第二遍记录:

    public class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            preOrder(root,res);
            return res;
        }
        private void preOrder(TreeNode root,List<Integer> res){
            if(root!=null){
                res.add(root.val);
                preOrder(root.left,res);
                preOrder(root.right,res);
            }
            
        }
        
    }

    非递归写法:需要1个stack,先进右子树再进左子树,出来时候就反过来了,多画画图瞅瞅。

    public class Solution {
        public List<Integer> preorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<Integer>();
            if(root==null)
                return res;
            Stack<TreeNode> stack = new Stack<TreeNode>();
            stack.push(root);
            while(!stack.isEmpty()){
                TreeNode out = stack.pop();   
                res.add(out.val);
                if(out.right!=null)
                    stack.push(out.right);
                if(out.left!=null)
                    stack.push(out.left);
    
            }
            
            return res;
        }
    
    }
  • 相关阅读:
    关于DRY原则
    类型之惑
    ThoughtWorks测试
    编程非易事
    瀑布与迭代的真实区别
    对TDD原则的理解
    自我练习
    C# CreateProcess的测试
    乱侃OOD
    复杂系统的五个属性
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3829618.html
Copyright © 2020-2023  润新知