逐层遍历一棵二叉树,要求相邻两层遍历方向相反(java)

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 *
 * @author zhongchenghui
 */
public class BTreeTraversal {

    public static void main(String[] args) {
        Node root = new Node("a");
        Node b = new Node("b");
        Node c = new Node("c");
        root.setLeft(b);
        root.setRight(c);
        Node d = new Node("d");
        Node e = new Node("e");
        b.setLeft(d);
        b.setRight(e);
        Node f = new Node("f");
        c.setLeft(f);
        Node g = new Node("g");
        Node h = new Node("h");
        d.setLeft(g);
        d.setRight(h);
        Node i = new Node("i");
        Node j = new Node("j");
        f.setLeft(i);
        f.setRight(j);
        Node k = new Node("k");
        Node l = new Node("l");
        j.setLeft(k);
        j.setRight(l);
        traversal(root);
    }

    public static void traversal(Node root) {
        List<Node> result = new ArrayList<>();        
        boolean status = true;
        Stack<Node> layerNodes = new Stack<>();
        layerNodes.add(root);
        while (layerNodes.size() > 0) {
            result.addAll(layerNodes);
            layerNodes = getNextLayer(layerNodes, status);
            status = !status;
        }
        System.out.println(result);
    }

    public static Stack<Node> getNextLayer(Stack<Node> stack, boolean status) {
        Stack<Node> layerNodes = new Stack();
        while (stack.size() > 0) {
            Node node = stack.pop();
            if (status) {
                if (node.right != null) {
                    layerNodes.add(node.right);
                }
                if (node.left != null) {
                    layerNodes.add(node.left);
                }
            } else {
                if (node.left != null) {
                    layerNodes.add(node.left);
                }
                if (node.right != null) {
                    layerNodes.add(node.right);
                }
            }
        }
        return layerNodes;
    }
}
public class Node {

    String value;
    Node left;
    Node right;

    public Node(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public Node getLeft() {
        return left;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getRight() {
        return right;
    }

    public void setRight(Node right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "Node{" + "value=" + value + '}';
    }

}

猜你喜欢

转载自ChenghuiZ.iteye.com/blog/2381416