Binary print zigzag order && print the binary tree into multiple lines

Binary Tree zigzag print order

Implement according to a zigzag print function binary tree, i.e., left to right, the first print line of the second layer in order to print from right to left, the third line from left to right order of printing, in other rows forth.

Problem-solving ideas

Use of the underlying LinkedList in Java implementation is a doubly linked list of features

  1. Queue can be used to achieve the level of tree traversal
  2. Bi-directionally traverse, traversal odd layers from front to back, forward traversal from the even layers

Code

`import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

/**

  • Offer a brush prove safety: the print order of the zigzag binary
  • @author User
  • @create 2019-06-09-21:23
    */

public class jzo59 {
public ArrayList<ArrayList> Print(TreeNode pRoot) {
ArrayList<ArrayList> ret=new ArrayList<>();
if (pRoot==null){
return ret;
}
ArrayList list=new ArrayList<>();
LinkedList queue=new LinkedList<>();
queue.addLast(null); //层分隔符
queue.addLast(pRoot);
boolean leftToRight=true;

    while (queue.size()!=1){
        TreeNode node=queue.removeFirst();
        if (node==null){//到达层分隔符
            Iterator<TreeNode> iter=null;
            if (leftToRight){
                iter=queue.iterator();
            }else {
                iter=queue.descendingIterator();  //从后往前遍历
            }
            leftToRight=!leftToRight;
            while (iter.hasNext()){
                TreeNode temp=(TreeNode)iter.next();
                list.add(temp.val);
            }
            ret.add(new ArrayList<Integer>(list));
            list.clear();
            queue.addLast(null);   //添加分层符
            continue;
        }
        if(node.left!=null){
            queue.addLast(node.left);
        }
        if (node.right!=null){
            queue.addLast(node.right);
        }
    }
    return ret;
}
public static void main(String[] args){
    TreeNode node1=new TreeNode(1);
    TreeNode node2=new TreeNode(2);
    TreeNode node3=new TreeNode(3);
    TreeNode node4=new TreeNode(4);
    TreeNode node5=new TreeNode(5);
    TreeNode node6=new TreeNode(6);
    TreeNode node7=new TreeNode(7);
    TreeNode node8=new TreeNode(8);
    TreeNode node9=new TreeNode(9);
    node1.left=node2;
    node1.right=node3;
    node2.left=node4;
    node2.right=node5;
    node3.left=node6;
    node3.right=node7;
    node4.left=node8;
    node4.right=node9;
    jzo59 so=new jzo59();
    System.out.println(so.Print(node1));

}

}`

The binary print into multiple lines.

Printing the binary tree in layers from top to bottom, from left to right with the output layer node. Each line of output layer.

Problem-solving ideas

  1. Recursive complete

Code

`
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**

  • Offer a brush prove safety: the binary tree into multiple lines printed
  • @author User
  • @create 2019-06-10-11:22
    */

public class jzo60 {
ArrayList<ArrayList> Print(TreeNode pRoot) {
ArrayList<ArrayList> list = new ArrayList<>();
depth(pRoot, 1, list);
return list;
}

private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
    if(root == null) return;
    if(depth > list.size()) {
        list.add(new ArrayList<Integer>());
    }
    list.get(depth -1).add(root.val);

    depth(root.left, depth + 1, list);
    depth(root.right, depth + 1, list);
}
ArrayList<ArrayList<Integer> > Print1(TreeNode pRoot) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if(pRoot == null){
        return result;
    }
    Queue<TreeNode> layer = new LinkedList<TreeNode>();
    ArrayList<Integer> layerList = new ArrayList<Integer>();
    layer.add(pRoot);
    int start = 0, end = 1;
    while(!layer.isEmpty()){
        TreeNode cur = layer.remove();
        layerList.add(cur.val);
        start++;
        if(cur.left!=null){
            layer.add(cur.left);
        }
        if(cur.right!=null){
            layer.add(cur.right);
        }
        if(start == end){
            end = layer.size();
            start = 0;
            result.add(layerList);
            layerList = new ArrayList<Integer>();
        }
    }
    return result;
}
public static void main(String[] args){
    TreeNode node1=new TreeNode(1);
    TreeNode node2=new TreeNode(2);
    TreeNode node3=new TreeNode(3);
    TreeNode node4=new TreeNode(4);
    TreeNode node5=new TreeNode(5);
    TreeNode node6=new TreeNode(6);
    TreeNode node7=new TreeNode(7);
    TreeNode node8=new TreeNode(8);
    TreeNode node9=new TreeNode(9);
    node1.left=node2;
    node1.right=node3;
    node2.left=node4;
    node2.right=node5;
    node3.left=node6;
    node3.right=node7;
    node4.left=node8;
    node4.right=node9;
    jzo60 so=new jzo60();
    System.out.println(so.Print(node1));
    System.out.println(so.Print1(node1));

}

}`

Guess you like

Origin blog.csdn.net/weixin_41676282/article/details/91405991