java实现从左到右打印二叉树
对于二叉树相信大家都很熟悉了,作为一个程序员都是学过数据结构的。对于二叉树的遍历大家应该都不陌生吧!我们都试过前序遍历,中序遍历,后续遍历。但是我们很少去从左到右打印一棵二叉树! 刚一接触可能有点蒙哈!其实,这个东西并不麻烦也不神奇,我们下面先说一下这个思路和流程哈!首先,我们拿到这颗二叉树会拿到根节点,也就是root,我现在用一个三层的树做例子:我们 这里,我们首先准备一个队列,首先将红色节点入队,然后,打印出相应的节点值,这样第一层就打印完毕了。然后我们将队列中的节点拿出来判断一下左右子节点是否都存在 如果存在就先入队列,先入左节点,然后入右节点。同时将相应的节点值打出,这样我们就第二层入队完毕了。 此时对列中有 2和3,因为1 已经被我们出队列了。接下来我们从队列的头部取出节点2 ,首先打印相应的值,然后入队相应的左右子节点,这时队列中有3,4,5 然后我们从队列中继续取出,3,然后打印3,接下来入队3的左右子节点,这时队列中有4,5,6,7 然后,我们取出 4 打印并入队相应的子节点,但是发现没有节点可以入队。这时队列中还有5,6,7。以此类推,我们就一层一层的打印出了相应的二叉树,而且是从左到右的。代码如下:代码里的用的数据结构不是队列,不过我们用它起到队列的作用。import java.util.ArrayList; import java.util.concurrent.LinkedBlockingDeque; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> arrayList = new ArrayList<Integer>(); if (root == null) { return arrayList; } LinkedBlockingDeque<TreeNode> queue = new LinkedBlockingDeque<TreeNode>(); queue.addFirst(root); while (!queue.isEmpty()) { TreeNode curNode = queue.pollLast(); arrayList.add(curNode.val); if (curNode.left != null ) { queue.addFirst(curNode.left); } if( curNode.right != null){ queue.addFirst(curNode.right); } } return arrayList; } }
欢迎评论哟!
java实现从左到右打印二叉树
最新推荐文章于 2024-07-31 16:30:56 发布