利用java如何实现遍历二叉树
这篇文章给大家介绍利用java如何实现遍历二叉树,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
公司主营业务:做网站、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出绥棱免费做网站回馈大家。
遍历二叉树,从上往下遍历。但是同层节点可以从左向右遍历,也可以从右向左遍历(也就是之字型遍历),其中,都需要队列进行实现。只是按照之字型稍微麻烦一些。
(1)从上往下打印出二叉树的每个节点,同层节点从左至右打印。
需要一个队列,队列里面放节点(从根节点开始),然后依次进行打印。
import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; class TreeNode{ int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val){ this.val = val; } } public class Solution { public ArrayListPrintFromTopToBottom(TreeNode root) { ArrayList list = new ArrayList (); if(root == null) return list; Queue queue = new LinkedList (); queue.add(root); while(!queue.isEmpty()){ TreeNode t = queue.poll(); list.add(t.val); if(t.left != null) queue.add(t.left); if(t.right != null) queue.add(t.right); } return list; } }
(2)请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解析:之字形打印二叉树,不要将所有层放入ArrayList中后再将偶数层进行reverse(),这样可以实现,但是数据量大的时候效率太低。
import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Solution { public ArrayList> Print(TreeNode pRoot) { ArrayList > result=new ArrayList >(); if(pRoot==null){ return result; } Queue queue = new LinkedList (); int rows=1; queue.add(pRoot); while(!queue.isEmpty()){ ArrayList list=new ArrayList(); int size=queue.size(); for(int i=0;i
(3)从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
这道题就是典型的二叉树层次遍历。
思路:因为我们要按层打印,所以需要设置标志量。
其次:我们需要三个集合:
第一个集合用于存放结果集
第二个集合用于临时存放每一层的结果,等到一层结束之后,再将其加入到最终结果集中。注意,每一次使用完这个集合之后,需要将其清空,以便下一次存放。
第三个集合用于存放节点。
import java.util.ArrayList; import java.util.LinkedList; import java.util.*; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Solution { ArrayList> Print(TreeNode pRoot) { ArrayList > result = new ArrayList >(); ArrayList arrayList = new ArrayList (); Queue queue = new LinkedList (); // 存放节点 // 检查是否为空 if (pRoot == null) return result; queue.add(pRoot); int start = 0; int end = 1; // 第一行 while (!queue.isEmpty()) { TreeNode treeNode = queue.poll(); end--; arrayList.add(treeNode.val); if (treeNode.left != null) // 如果有左节点 { queue.add(treeNode.left);// 将左节点加入linkedList中 start++; // 标志进入下一行 } if (treeNode.right != null) { queue.add(treeNode.right); start++; // 标志进入下一行 } if (end == 0) { // 此时也就是说明把一层已经打印完了,应该将其加入结果集中 result.add(new ArrayList (arrayList)); // 加入结果集中 arrayList.clear();// 必须将临时存放结果的集合清空,以便进行下一次存放 end = start; // 恢复原状 start = 0; } } return result; } }
关于利用java如何实现遍历二叉树就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
分享名称:利用java如何实现遍历二叉树
浏览路径:http://ybzwz.com/article/gppgpo.html