天天看點

二叉樹按行列印,換行。。。。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<code>public</code> <code>class</code> <code>Tree {</code>

<code>    </code><code>TreeNode last;</code>

<code>    </code><code>TreeNode nlast;</code>

<code>    </code><code>public</code> <code>void</code> <code>printTree(TreeNode root) {</code>

<code>        </code><code>Queue&lt;TreeNode&gt; queue = </code><code>new</code> <code>LinkedList&lt;&gt;();</code>

<code>        </code><code>queue.add(root);</code>

<code>        </code><code>last = root;</code>

<code>        </code><code>nlast = root;</code>

<code>        </code><code>while</code> <code>(!queue.isEmpty()) {</code>

<code>            </code><code>TreeNode t = queue.peek();</code>

<code>            </code><code>System.out.print(queue.poll().data + </code><code>" "</code><code>);</code>

<code>            </code><code>if</code> <code>(t.left != </code><code>null</code><code>) {</code>

<code>                </code><code>queue.add(t.left);</code>

<code>                </code><code>nlast = t.left;</code>

<code>            </code><code>}</code>

<code>            </code><code>if</code> <code>(t.right != </code><code>null</code><code>) {</code>

<code>                </code><code>queue.add(t.right);</code>

<code>                </code><code>nlast = t.right;</code>

<code>            </code><code>// 如果目前輸出結點是最右結點,那麼換行</code>

<code>            </code><code>if</code> <code>(last == t) {</code>

<code>                </code><code>System.out.println();</code>

<code>                </code><code>last = nlast;</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

差不多就是用倆指針,一個指向最後節點,另一個一次指向,當便利到的節點等于每行最後一個節點時就換行。。。。。。。。。

本文轉自 努力的C 51CTO部落格,原文連結:http://blog.51cto.com/fulin0532/1976534