zoukankan      html  css  js  c++  java
  • [LeetCode] 144. Binary Tree Preorder Traversal Java

    题目:

    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].

    题意及分析:给出一个二叉树,求先序遍历的结果。使用递归很简单,但是要求不用递归,所以我们可以使用一个stack来实现非递归方法,维护一个stack,保存从根节点一直到最左边的叶节点上的点,同时将这些点的值添加进结果集,达到叶节点后需要查看该节点是否有兄弟节点(即该点的父节点是否有右子节点),若有则对该兄弟节点同样遍历到最左叶节点,然后返回上一层,以此类推。具体实现看代码:

    /**
     * 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> res = new ArrayList<>();
    		Stack<TreeNode> stack=new Stack<>();
    		
    		while(root!=null||!stack.isEmpty()){
    			if(root!=null){
    				stack.push(root);
    				res.add(root.val);
    				root = root.left;
    			}else{
    				root=stack.pop();
    				root=root.right;
    			}
    		}
    		return res;
        }
    }
    

      

     

  • 相关阅读:
    notion笔记
    PHP性能分析工具xdebug+qcachegrind
    Homebrew1.5之后安装PHP和扩展
    Yii2 创建新项目目录
    MAC的一些实用
    Item2 + zsh
    YII2 RBAC Admin User权限相关
    ITEM 2 MAC OSX 功能略强大的终端
    MAC终端配色Solarized
    微服务 SpringCloud + docker
  • 原文地址:https://www.cnblogs.com/271934Liao/p/7017763.html
Copyright © 2011-2022 走看看