java編程-蛇形打印


java編程-蛇形打印


蛇形打印:將一個樹型結構按照層級首尾相接地打印。例如將

8

6 10

5 7 9 11

打印為

8

10 6

5 7 9 11

即將偶數層逆序


直接上代碼:

public class SnakePrint {

public static void main(String[] args) {

Queue<btreenode> nodes = new LinkedBlockingQueue<btreenode>();/<btreenode>/<btreenode>

Stack<btreenode> stack = new Stack<btreenode>();/<btreenode>/<btreenode>

nodes.add(root);

nodes.add(xx);

// true:順序打印,false:逆序

boolean flag = true;

while (!nodes.isEmpty()) {

BtreeNode n = nodes.poll();

if (n == xx) {

while (!flag && !stack.isEmpty()) {

System.out.print(stack.pop().val + " ");

}

if (!nodes.isEmpty()) {

System.out.println();

nodes.add(xx);

flag = !flag;

}

} else {

if (flag) {

System.out.print(n.val + " "); // flag為true直接順序打印

} else {

stack.push(n);// flag為false的入棧待遇到換行標誌再出棧打印

}

if (null != n.left) { // 左孩子入棧

nodes.add(n.left);

}

if (null != n.right) { // 右孩子入棧

nodes.add(n.right);

}

}

}

}

/** 分層標記 */

private static BtreeNode xx = new BtreeNode(Integer.MAX_VALUE);

/** 樹根 */

private static BtreeNode root;

static {

BtreeNode t01, t02, t11, t12;

t01 = new BtreeNode(5);

t02 = new BtreeNode(7);

t11 = new BtreeNode(6);

t11.left = t01;

t11.right = t02;

t01 = new BtreeNode(9);

t02 = new BtreeNode(11);

t12 = new BtreeNode(10);

t12.left = t01;

t12.right = t02;

root = new BtreeNode(8);

root.left = t11;

root.right = t12;

}

static class BtreeNode {

BtreeNode left;

BtreeNode right;

int val;

public BtreeNode(int val) {

this.val = val;

}

@Override

public String toString() {

return super.toString() + "_" + val;

}

}

}

如有更好的實現請回復交流。


分享到:


相關文章: