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

      

  • 相关阅读:
    devDependencies和dependencies的版本写法
    dependencies 与 devDependencies 的区别
    Java +selenium Navigation接口介绍
    Java + selenium window()接口方法介绍
    Java + selenium Timeout接口用法介绍
    Java + selenium 启动谷歌浏览器
    selenium 3 下载 + Java使用
    Rsync 实现服务器文件的同步——服务端的安装配置
    selenium V1.0和V2.0差别对比
    PHP的安装配置
  • 原文地址:https://www.cnblogs.com/lt123/p/13803892.html
Copyright © 2020-2023  润新知