二叉树遍历
一、模拟二叉树的结构如下
二、后序遍历
基本思路:遍历当前节点的左边,如果当前节点的左节点不为空,则继续查找。如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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)