马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- 144.二叉树的前序遍历(opens new window)
- 145.二叉树的后序遍历(opens new window)
- 94.二叉树的中序遍历
二叉数的先中后序同一遍历法
- public static void preOrder(BiTree root){
- BiTree p = root;
- LinkedList<BiTree> stack = new LinkedList<>();
- while(p != null || !stack.isEmpty()){
- if(p != null){
- System.out.print(p.val +"\t");
- stack.push(p);
- p = p.left;
- }else {
- p = stack.pop();
- p = p.right;
- }
- }
- }
复制代码- public static void preOrder00(BiTree root){
- LinkedList<BiTree>stack = new LinkedList<>();
- stack.push(root);
- while(!stack.isEmpty()){
- BiTree node = stack.peek();
- if(node != null){
- stack.pop();
- if(node.right != null){
- stack.push(node.right);
- }
- if(node.left !=null){
- stack.push(node.left);
- }
- stack.push(node);
- stack.push(null);
- }else {
- stack.pop();
- BiTree p = stack.peek();
- stack.pop();
- System.out.print(p.val + "\t");
- }
- }
- System.out.println();
- }
复制代码- public static void preOrder03(BiTree root){
- if(root == null){
- return;
- }
- LinkedList<BiTree> stack = new LinkedList<>();
- stack.push(root);
- Map<BiTree,Boolean> visited = new HashMap<>();
- while(!stack.isEmpty()){
- BiTree node = stack.peek();
- stack.pop();
- if(visited.getOrDefault(node,false)){
- System.out.print(node.val +"\t");
- continue;
- }
- if(node.right != null){
- stack.push(node.right);
- visited.put(node.right, false);
- }
- if(node.left != null){
- stack.push(node.left);
- visited.put(node.left,false);
- }
- stack.push(node);
- visited.put(node,true);
- }
- System.out.println("");
- }
复制代码
- public static void inOrder(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<>();
- BiTree p = root;
- while( p != null || !stack.isEmpty()){
- if(p != null){
- stack.push(p);
- p = p.left;
- }else {
- p = stack.pop();
- System.out.print(p.val + "\t");
- p = p.right;
- }
- }
- }
复制代码- public static void inOrder00(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<BiTree>();
- stack.push(root);
- while(!stack.isEmpty()){
- BiTree node = stack.peek();
- if(node != null){
- stack.pop();
- if(node.right != null){
- stack.push(node.right);
- }
- stack.push(node);
- stack.push(null);
- if(node.left != null){
- stack.push(node.left);
- }
- }else {
- stack.pop();
- node = stack.peek();
- stack.pop();
- System.out.print(node.val + "\t");
- }
- }
- System.out.println();
- }
复制代码- public static void inOrder03(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<>();
- stack.push(root);
- Map<BiTree,Boolean> isVisited = new HashMap<BiTree,Boolean>();
- while(!stack.isEmpty()){
- BiTree node = stack.peek();
- stack.pop();
- if(isVisited.getOrDefault(node, false)){
- System.out.print(node.val +"\t");
- continue;
- }
- if(node.right != null){
- stack.push(node.right);
- isVisited.put(node.right, false);
- }
- stack.push(node);
- isVisited.put(node, false);
- if(node.left != null){
- stack.push(node.left);
- isVisited.put(node.left, false);
- }
- isVisited.put(node, true);
- }
- }
复制代码
- public static void postOrder00(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<>();
- stack.push(root);
- while(!stack.isEmpty()){
- BiTree p = stack.peek();
- if(p != null){
- stack.pop();
- stack.push(p);
- stack.push(null);
- if(p.right != null){
- stack.push(p.right);
- }
- if(p.left != null) {
- stack.push(p.left);
- }
- }else {
- stack.pop();
- p = stack.peek();
- System.out.print(p.val +"\t");
- stack.pop();
- }
- }
- System.out.println();
- }
复制代码- public static void postOrder03(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<>();
- BiTree p = root;
- stack.push(p);
- Map<BiTree,Boolean> isVisited = new HashMap<>();
- while(!stack.isEmpty()){
- BiTree node = stack.peek();
- stack.pop();
- if(isVisited.getOrDefault(node,false)){
- System.out.print(node.val+"\t");
- continue;
- }
- stack.push(node);
- isVisited.put(node, true);
- if(node.right != null){
- stack.push(node.right);
- isVisited.put(node.right, false);
- }
- if(node.left != null){
- stack.push(node.left);
- isVisited.put(node.left, false);
- }
- }
- }
复制代码- public static void postOrder(BiTree root){
- LinkedList<BiTree> stack = new LinkedList<BiTree>();
- BiTree p = root;
- BiTree r = null;
- while(p != null || !stack.isEmpty()){
- if(p != null){
- stack.push(p);
- p = p.left;
- }else {
- p = stack.peek();
- if (p.right != null && p.right != r) {
- p = p.right;
- } else {
- p = stack.pop();
- System.out.print(p.val + "\t");
- r = p;
- p = null;
- }
- }
- }
- }
复制代码 107.二叉树的条理遍历 II
力扣题目链接(opens new window)
给定一个二叉树,返回其节点值自底向上的条理遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
- public List<List<Integer>> levelOrderBottom(TreeNode root) {
- List<List<Integer>> results = new ArrayList<List<Integer>>();
- LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
- if(root == null){
- return results;
- }
- queue.offer(root);
- while(!queue.isEmpty()){
- int queueSize = queue.size();
- List<Integer> result = new ArrayList<Integer>();
- for(int i = 1; i <= queueSize; i++){
- TreeNode node = queue.poll();
- result.add(node.val);
- if(node.left != null){
- queue.offer(node.left);
- }
- if(node.right != null){
- queue.offer(node.right);
- }
- if(i == queueSize){
- results.addFirst(result);
- }
- }
- }
- return results;
- }
复制代码 199.二叉树的右视图
力扣题目链接(opens new window)
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
- public List<Integer> rightSideView(TreeNode root) {
- List<Integer> results= new ArrayList<Integer>();
- if(root == null){
- return results;
- }
- Queue<TreeNode> queue = new LinkedList<TreeNode>();
- queue.offer(root);
- while(!queue.isEmpty()){
- int queueSize = queue.size();
- for(int i = 1; i <= queueSize; i++){
- TreeNode node = queue.poll();
- if(node.left != null){
- queue.offer(node.left);
- }
- if(node.right != null){
- queue.offer(node.right);
- }
- if(i == queueSize){
- results.add(node.val);
- }
- }
- }
- return results;
- }
复制代码 429.N叉树的层序遍历
力扣题目链接(opens new window)
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
例如,给定一个 3叉树 :
返回其层序遍历:
[ [1], [3,2,4], [5,6] ]
- public List<List<Integer>> levelOrder(Node root) {
- LinkedList<Node> queue = new LinkedList<Node>();
- queue.offer(root);
- List<List<Integer>> results = new ArrayList<List<Integer>>();
- if(root == null){
- return results;
- }
- while(!queue.isEmpty()){
- List<Integer> result = new ArrayList<Integer>();
- int levelSize = queue.size();
- for(int i = 1; i <= levelSize; i++){
- Node node = queue.poll();
- result.add(node.val);
- if(node.children != null){
- for(int j = 0; j < node.children.size();j++){
- queue.offer(node.children.get(j));
- }
- }
- }
- results.add(result);
- }
- return results;
- }
复制代码
|