二叉树遍历

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

二、后序遍历

  基本思路:遍历当前节点的左边,如果当前节点的左节点不为空,则继续查找。如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 }
View Code
复制代码

 

  运行结果如下:

 

 

二、中序遍历

  基本思路:根节点的左半边作为整体,排序存放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     }
View Code
复制代码

 

    运行结果如下:

三、前序遍历

  基本思路:从根节点开始,从根节点的左边节点到右边节点依次排序。

  将后序遍历的代码做下修改,代码如下

复制代码
 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     }
View Code
复制代码

 

  运行结果如下:

 

 

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

  

posted @   无虑的小猪  阅读(123)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示