二叉树遍历
一、模拟二叉树的结构如下

二、后序遍历
基本思路:遍历当前节点的左边,如果当前节点的左节点不为空,则继续查找。如A的左节点是B;再判断B的左节点,此时B的左节点不为空,获得B的左节点,直到某一节点的左节点为null。
代码如下:
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class Test { 5 //根节点 6 private static TreeNode root; 7 //存放排序的节点内容 8 private static List<TreeNode> list = new ArrayList<TreeNode>(); 9 10 public static void main(String[] args){ 11 //初始化 12 init(); 13 //前序排序 14 //preOrder(root); 15 //中序排序 16 //midOrder(root); 17 //后序排序 18 postOrder(root); 19 //输出结果 20 list.stream().forEach(TreeNode -> { 21 System.out.print(TreeNode.value); 22 }); 23 } 24 //初始化二叉树 25 public static void init() { 26 TreeNode c = new TreeNode("C", null, null); 27 TreeNode d = new TreeNode("D", null, null); 28 TreeNode b = new TreeNode("B", c, d); 29 30 TreeNode g = new TreeNode("G", null, null); 31 TreeNode e = new TreeNode("E", null, null); 32 TreeNode f = new TreeNode("F", e, g); 33 root = new TreeNode("A", b, f); 34 } 35 36 //前序遍历递归实现 37 public static void preOrder(TreeNode biTree){ 38 list.add(biTree); 39 if(biTree.left!=null) { 40 preOrder(biTree.left); 41 } 42 if(biTree.right!=null) { 43 preOrder(biTree.right); 44 } 45 } 46 47 //中序遍历递归实现 48 public static void midOrder(TreeNode biTree){ 49 if(biTree.left!=null) { 50 midOrder(biTree.left); 51 } 52 list.add(biTree); 53 if(biTree.right!=null) { 54 midOrder(biTree.right); 55 } 56 } 57 58 //后序遍历递归实现 59 public static void postOrder(TreeNode biTree){ 60 if(biTree.left!=null) { 61 postOrder(biTree.left); 62 } 63 if(biTree.right!=null) { 64 postOrder(biTree.right); 65 } 66 list.add(biTree); 67 } 68 } 69 70 //二叉树结构节点 71 class TreeNode{ 72 Object value; 73 TreeNode left; 74 TreeNode right; 75 76 public TreeNode(Object value, TreeNode left, TreeNode right){ 77 this.value = value; 78 this.left = left; 79 this.right = right; 80 } 81 }
运行结果如下:

二、中序遍历
基本思路:根节点的左半边作为整体,排序存放list中;根节点放入list中;根节点的右半边作为整体放入list中
将后序遍历的代码做下修改,代码如下
1 //中序遍历递归实现 2 public static void midOrder(TreeNode biTree){ 3 if(biTree.left!=null) { 4 midOrder(biTree.left); 5 } 6 list.add(biTree); 7 if(biTree.right!=null) { 8 midOrder(biTree.right); 9 } 10 }
运行结果如下:

三、前序遍历
基本思路:从根节点开始,从根节点的左边节点到右边节点依次排序。
将后序遍历的代码做下修改,代码如下
1 //前序遍历递归实现 2 public static void preOrder(TreeNode biTree){ 3 list.add(biTree); 4 if(biTree.left!=null) { 5 preOrder(biTree.left); 6 } 7 if(biTree.right!=null) { 8 preOrder(biTree.right); 9 } 10 }
运行结果如下:

参考地址:https://www.jb51.net/article/118130.htm

浙公网安备 33010602011771号