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

      

  • 相关阅读:
    html抽取文本信息-java版(适合lucene建立索引)
    【LeetCode with Python】 Sort List
    POJ 2533 Longest Ordered Subsequence(dp LIS)
    Activity 之间 传递 List 封装的对象或者对象
    mongo数据库--非关系型数据库
    cocos2d-x的声音控制
    CSDN博客积分规则
    怎样使用递归实现归并排序
    android中9-patch图片的使用
    Cocos2d-x-3.0环境搭建
  • 原文地址:https://www.cnblogs.com/lt123/p/13803892.html
Copyright © 2011-2022 走看看