二叉樹層次遍歷並列印行號——java
阿新 • • 發佈:2019-01-01
主要程式碼
public void levelOrderNew(TreeNode root) {
TreeNode last=root; //當前行最右結點
TreeNode nlast = null; //下一行最右結點
TreeNode temp;
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
temp=queue .poll();
System.out.print(temp.getData()+" ");
if(temp.getLeftNode()!=null) {
queue.offer(temp.getLeftNode());
nlast=temp.getLeftNode();
}
if(temp.getRightNode()!=null)
{
queue.offer(temp.getRightNode());
nlast= temp.getRightNode();
}
if(temp==last) {
System.out.println();
last=nlast;
}
}
}
演算法思想:
1.分別標識出所在行的最右結點last,以及下一行的最右結點nlast;
2.nlast一直跟蹤記錄佇列中最新加入的結點,最新加入的結點一定是發現的下一行的最右結點。所以當前行打完時,nlast一定是下一行的最右結點。
2.如果輸出結點是last結點,說明該換行了,last=nlast。