zoukankan      html  css  js  c++  java
  • leetcode94 二叉树的中序遍历

    题目描述
    给定一个二叉树,返回它的中序 遍历。
    示例:
    输入: [1,null,2,3]
       1
       
         2
        /
       3
    输出: [1,3,2]
    进阶: 递归算法很简单,你可以通过迭代算法完成吗?
     
    	public List<Integer> inorderTraversal(TreeNode root) {
    		List<Integer> list = new ArrayList<Integer>();
    		inorder(root, list);
    		return list;
    	}
    
    	/**
    	 * 中序递归遍历
    	 * @param root
    	 * @param list
    	 */
    	public void inorder(TreeNode root, List<Integer> list) {
    		if (root == null) {
    			return;
    		}
    		inorder(root.left, list);
    		list.add(root.val);
    		inorder(root.right, list);
    	}
    
    	/**
    	 * 中序非递归排序 使用栈来存储结点信息
    	 * @param root
    	 * @param list
    	 */
    	public void inorder1(TreeNode root, List<Integer> list) {
    		Stack<TreeNode> stack = new Stack<TreeNode>();
    		TreeNode p = root;
    		while (p != null || !stack.isEmpty()) {
    			if (p != null) {
    				stack.push(p);
    				p = p.left;
    			} else {
    				p = stack.pop();
    				list.add(p.val);
    				p = p.right;
    			}
    		}
    	}
    
    	/**
    	 * 颜色标记法 中序非递归遍历
    	 * 核心思想如下:
    	   使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。
    	   如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。
    	   如果遇到的节点为灰色,则将节点的值输出
    	 * @param root
    	 * @param list
    	 */
    	public void inorder2(TreeNode root, List<Integer> list) {
    		Stack<Object> stack = new Stack<Object>();
    		stack.push(root);
    		while (!stack.isEmpty()) {
    			Object pop = stack.pop();
    			if (pop == null) {
    				continue;
    			}
    			if (pop instanceof TreeNode) {
    				TreeNode tmp = (TreeNode) pop;
    				stack.push(tmp.right);
    				stack.push(tmp.val);
    				stack.push(tmp.left);
    			} else {
    				list.add((Integer) pop);
    			}
    		}
    	}
    

      

  • 相关阅读:
    HTML5开发在你的游戏应用中加入广告(转)
    AJAX笔试面试题汇总
    jQuery boxy弹出层插件中文演示及讲解(转)
    jquery获取css中的选择器
    post与get在ashx中的取值的区别
    css元素定位和布局
    jquery作用和优势
    css选择器
    css中的框架模型
    javascript中的对Attr(dom中属性)操作
  • 原文地址:https://www.cnblogs.com/lt123/p/13803892.html
Copyright © 2011-2022 走看看