LeetCode0094-二叉树的遍历
迭代算法实现二叉树的遍历
//实现二叉树的前序、中序、后序遍历 import java.util.ArrayList; import java.util.List; import java.util.Stack;
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
class ColorNode{ TreeNode node; String color; public ColorNode(TreeNode node,String color){ this.node=node; this.color=color; } } //递归算法 public class Num094_binaryTree { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null) return res; inorder(root,res); return res; } // 中序: 左根右 public void inorder(TreeNode node ,List<Integer> res){ if(node ==null) return; inorder(node.left,res); res.add(node.val); inorder(node.right,res); } // 前序:根左右 public void beforeorder(TreeNode node,List<Integer> res){ if(node ==null) return; res.add(node.val); beforeorder(node.left,res); beforeorder(node.right,res); } // 后续:左右根 public void afterorder(TreeNode node,List<Integer> res){ if(node ==null) return; beforeorder(node.left,res); beforeorder(node.right,res); res.add(node.val); } public List<Integer> inorderTraversal1(TreeNode root){ if (root ==null ) return new ArrayList<Integer>(); List<Integer> res = new ArrayList<>(); Stack<ColorNode> stack= new Stack<>(); stack.push(new ColorNode(root,"white")); while(!stack.empty()){ ColorNode cn = stack.pop(); if(cn.color.equals("white")){ if(cn.node.right !=null) stack.push(new ColorNode(cn.node.right,"white")); stack.push(new ColorNode(cn.node,"gray")); if(cn.node.left !=null) stack.push(new ColorNode(cn.node.left,"white")); }else{ res.add(cn.node.val); } } return res; } }
class