二叉树的遍历
一、求高度的函数
public static <T extends Comparable<T>> int height(Node<T> root) { if(root == null) { return 0; }else { return height(root.getLeft())>height(root.getRight())?height(root.getLeft())+1:height(root.getRight())+1; } }
二、层次遍历二叉树
public static <T extends Comparable<T>> void show(Node<T> root){ int height = height(root); System.out.println(height); List<Node<T>> list = new ArrayList<Node<T>>(); list.add(root); for(int i=height;i>0;i--) { int len = list.size(); int shu = (int)Math.pow(2, i-1); for(int j=0;j<len;j++) { for(int k=j*shu+(j-1>0?j-1:0)*shu;k<shu-1+j*shu*2;k++) { System.out.printf("%-5s",""); } Node<T> t = list.get(0); if(t==null) { System.out.printf("%-5s","x/x"); list.add(null); list.add(null); }else { System.out.printf("%-5s",t.getValue()+"/"+t.getHeight()); list.add(list.get(0).getLeft()); list.add(list.get(0).getRight()); } list.remove(0); } System.out.println(); System.out.println(); } }
二叉树的中序遍历
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new LinkedList<>(); LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); TreeNode tempNode = root; while (tempNode != null) { stack.push(tempNode); tempNode = tempNode.left; } while (!stack.isEmpty()) { tempNode = stack.pop(); result.add(tempNode.val); tempNode = tempNode.right; while (tempNode != null) { stack.push(tempNode); tempNode = tempNode.left; } } return result; } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } }
二叉树的前序遍历
class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new LinkedList<>(); LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); TreeNode tempNode = root; while (tempNode != null) { stack.push(tempNode); result.add(tempNode.val); tempNode = tempNode.left; } while (!stack.isEmpty()) { tempNode = stack.pop(); tempNode = tempNode.right; while (tempNode != null) { stack.push(tempNode); result.add(tempNode.val); tempNode = tempNode.left; } } return result; } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } }
二叉树的后序遍历
class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> result = new LinkedList<>(); LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); TreeNode tempNode = root; while (tempNode != null) { stack.push(tempNode); tempNode = tempNode.left; } while (!stack.isEmpty()) { tempNode = stack.peek(); if (tempNode.right != null) { tempNode = tempNode.right; while (tempNode != null) { stack.push(tempNode); tempNode = tempNode.left; } } else { tempNode = stack.pop(); result.add(tempNode.val); while (!stack.isEmpty() && stack.peek().right == tempNode) { tempNode = stack.pop(); result.add(tempNode.val); } } } return result; } class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } }