二叉树按层遍历
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树按层遍历相关的知识,希望对你有一定的参考价值。
/* * 二叉树的层次遍历 * 1.首先将根节点放入队列中。 2.当队列为非空时,循环执行步骤3到步骤5,否则执行6; 3.出队列取得一个结点,访问该结点; 4.若该结点的左子树为非空,则将该结点的左子树入队列; 5.若该结点的右子树为非空,则将该结点的右子树入队列; 6.结束。 */
import java.util.Queue;
public class BinaryTree<T> { private T data; private BinaryTree<T> left; private BinaryTree<T> right; private BinaryTree(T data) { this.data = data; } public BinaryTree() { } //层次遍历 public static void levelTraverse(BinaryTree root) { if(root==null) { try { throw new Exception("二叉树为空"); }catch (Exception e) { e.printStackTrace(); } }else { Queue<BinaryTree> queue = new Queue<BinaryTree>(); queue.enqueue(root); while(!queue.isEmpty()) { root = queue.dequeue(); System.out.print(root.data + " "); if(root.left != null) queue.enqueue(root.left); if(root.right != null) queue.enqueue(root.right); } } } //换行层次遍历 public static void newLevelTraverse(BinaryTree root) { BinaryTree last = new BinaryTree(); BinaryTree nlast = new BinaryTree(); if(root==null) { try { throw new Exception("二叉树为空"); }catch (Exception e) { e.printStackTrace(); } }else { Queue<BinaryTree> queue = new Queue<BinaryTree>(); queue.enqueue(root); last = root;//last表示正在打印的当前行 的最右节点 nlast = root;//nlast表示下一行的最右节点,nlast节点每次跟踪记录最先加入队列的节点 while(!queue.isEmpty()) { root = queue.dequeue(); System.out.print(root.data+" "); if(root.left != null) { queue.enqueue(root.left); nlast = root.left; } if(root.right != null) { queue.enqueue(root.right); nlast = root.right; } //如果当前输出节点root是最右节点last,那么换行 if(last == root) { System.out.println(); last = nlast;//last节点更新为nlast节点 } } } } public static void main(String[] args) { BinaryTree b1 = new BinaryTree(1); BinaryTree b2 = new BinaryTree(2); BinaryTree b3 = new BinaryTree(3); BinaryTree b4 = new BinaryTree(4); BinaryTree b5 = new BinaryTree(5); BinaryTree b6 = new BinaryTree(6); BinaryTree b7 = new BinaryTree(7); BinaryTree b8 = new BinaryTree(8); b1.left = b2; b1.right = b3; b2.left = b4; b3.left = b5; b3.right = b6; b5.left = b7; b5.right = b8; //层次遍历二叉树 BinaryTree.levelTraverse(b1);
//换行层次遍历
BinaryTree.newLevelTraverse(b1); } }
以上是关于二叉树按层遍历的主要内容,如果未能解决你的问题,请参考以下文章