二叉树
树的知识点
树结构
前序遍历
根-左-右。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public void preOrder(TreeNode node){ if(node == null){ System.out.println("二叉树为空"); return; }else{ Stack<TreeNode> s = new Stack<>(); s.push(node); while(s.size()>0){ node = s.pop(); System.out.println(node.val); if(node.right!=null){ s.push(node.right); } if(node.left!=null){ s.push(node.left); } } } }
public void preRecur(TreeNode node){ if (node == null) return; System.out.println(node.val); preRecur(node.left); preRecur(node.right); }
|
中序遍历
左-根-右。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public void infixOrder(TreeNode node){ if(node == null){ System.out.println("二叉树为空"); return; }else{ Stack<TreeNode> s = new Stack<>(); while(s.size()>0 || node != null){ if(node!=null){ s.push(node); node = node.left; }else{ node = s.pop(); System.out.println(node.val); node = node.right; } } } }
public void inRecur(TreeNode node){ if (node == null) return; inRecur(node.left); System.out.println(node.val); inRecur(node.right); }
|
后序遍历
左-右-根。使用前序遍历的方法获取 根-右-左 ,然后对结果进行反序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public void postOrder(TreeNode node){ if(node == null){ System.out.println("二叉树为空"); return; }else{ Stack<TreeNode> s1 = new Stack<>(); Stack<TreeNode> s2 = new Stack<>(); s1.push(node); while(s1.size()>0){ node = s1.pop(); s2.push(node); if(node.left!=null){ s1.push(node.left); } if(node.right!=null){ s1.push(node.right); } } } while(s2.size()>0){ System.out.println(s2.pop().val); } }
public void postRecur(TreeNode node){ if (node == null) return; postRecur(node.left); postRecur(node.right); System.out.println(node.val); }
|
层次遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public void levelOrder(TreeNode node){ if(node == null){ System.out.println("二叉树为空"); return; }else{ Queue<TreeNode> queue = new ArrayList<>(); queue.offer(node); while(!queue.isEmpty()){ node = queue.poll(); System.out.println(node.val); if(node.left!=null){ queue.offer(node.left); } if(node.right!=null){ queue.offer(node.right); } } } }
|