二叉树的广度遍历和深度遍历非递归
package com.hhy;import java.util.LinkedList; import java.util.Queue; import java.util.Stack; /** * @Information: * @Author: HeHaoYuan * @Date: Created at 7:53 on 2020/2/13 * @Package_Name: com.hhy */ class BinaryTree { class TreeNode { int value; TreeNode left; TreeNode right; public TreeNode(int value) { this.value = value; } } public int i = 0; TreeNode creatTesttree(String s) { TreeNode root = null; if (s.charAt(i) != '#') { root = new TreeNode(s.charAt(i)); i++; root.left = creatTesttree(s); root.right = creatTesttree(s); } else { i++; } return root; } //层序遍历 void binaryTreeLevelOrderNonR(TreeNode root) { Queue<TreeNode> queue = new LinkedList(); if (root != null) { queue.offer(root); } while (!queue.isEmpty()) { TreeNode cur = queue.poll(); System.out.print(cur.value + " "); if (cur.left != null) { queue.offer(cur.left); } if (cur.right != null) { queue.offer(cur.right); } } System.out.println(); } //前序遍历 void binaryTreePrevOrderNonR(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; TreeNode top = null; while (cur!=null || !stack.empty()){ while (cur!=null){ stack.add(cur); System.out.print(cur.value+" "); cur = cur.left; } top = stack.pop(); cur = top.right; } System.out.println(); } //中序遍历 void binaryTreeInOrderNonR(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; TreeNode top = null; while (!stack.empty() || cur != null) { while (cur != null) { stack.push(cur); cur = cur.left; } top = stack.pop(); System.out.print(top.value + " "); cur = top.right; } System.out.println(); } //后序遍历 void binaryTreePostOrderNonR(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; TreeNode prev = null; while (cur!=null || !stack.empty()){ while (cur!=null){ stack.add(cur); cur = cur.left; } cur = stack.peek(); if (cur.right == null || cur.right == prev){ stack.pop(); System.out.print(cur.value+" "); prev = cur; cur = null; } else { cur = cur.right; } } System.out.println(); } int getsize(TreeNode root){ if (root == null){ return 0; } return getsize(root.left)+getsize(root.right)+1; } int getleafsize(TreeNode root){ if (root == null){ return 0; } if(root.left==null && root.right==null){ return 1; } return getleafsize(root.left)+getleafsize(root.right); } } class Test{ public static void main(String[] args) { BinaryTree binaryTree = new BinaryTree(); BinaryTree.TreeNode root = binaryTree.creatTesttree("ABC###DEF##G###"); binaryTree.binaryTreeLevelOrderNonR(root); binaryTree.binaryTreePrevOrderNonR(root); binaryTree.binaryTreeInOrderNonR(root); binaryTree.binaryTreePostOrderNonR(root); System.out.println( binaryTree.getsize(root)); System.out.println(binaryTree.getleafsize(root)); } }