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;
        }
    }
    

      

     

  • 相关阅读:
    TCP协议-如何保证传输可靠性
    计算机网络基础(未完待续)
    计算机理论基础
    计算机网络
    操作系统与计算机网络
    Linux系统中的vi/vim指令【详解】
    Linux面试笔试题带答案【详解】
    关于梦想(五)
    Jmeter的安装教程【图文】
    关于梦想(四)
  • 原文地址:https://www.cnblogs.com/271934Liao/p/7017763.html
Copyright © 2011-2022 走看看