zoukankan      html  css  js  c++  java
  • 非递归实现先序遍历 java leecode 提交

    写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse
    第一种方式:数据结构书上的,使用栈大概思路。
    1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈。
    2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子。其实这里面有个思想
    迭代和递归的本质相同之处是什么?以后会写一篇我的思考。

    public class Solution { public List<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> arry=new ArrayList<Integer>(); if(root==null) return arry; Stack<TreeNode> s=new Stack<TreeNode>(); TreeNode t=root; while(t!=null||!s.isEmpty()) { while(t!=null) { arry.add(t.val); s.push(t); t=t.left; } if(!s.isEmpty()) { TreeNode tn=s.pop(); t=tn.right; } } return arry; } }

    下面这个思路,我用的dfs的非递归方式的思想http://www.cnblogs.com/hansongjiang/p/3812908.html这篇文章说的很清楚

    public class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
        	//只能使用非递归方式,来获得List
        	 ArrayList<Integer> arry=new ArrayList<Integer>();
        	Stack<TreeNode> s=new Stack<TreeNode>();
        	s.push(root);
        	while(!s.isEmpty())
        	{
        		
        		TreeNode t=s.pop();
        		arry.add(t.val);
        		
        		if(t.left!=null) s.push(t.left); 
        		if(t.right!=null) s.push(t.right);
        		
        		
        		
        	}
        	return arry;
        		
        	
        	
        	
            
            
            
        }
    }
    
  • 相关阅读:
    string去除指定字符
    size_t和int
    size_t和int
    mysql默认密码的查找与修改
    mysql默认密码的查找与修改
    MYSQL安装报错 -- 出现Failed to find valid data directory.
    Windows下修改Git bash的HOME路径
    在windows安装配置Git开发环境
    Git 历险记
    Git 简易使用指南及补充
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3813980.html
Copyright © 2011-2022 走看看