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

posted on 2021-06-30 10:26  cStream  阅读(37)  评论(0)    收藏  举报