三叉树的水平输出
三叉树的结构如上图。
要求:
1、任选一种编程语言,写代码,实现功能。
写函数,水平输出元素值。
A,
B,C,
D,G,K,
B,C,
D,G,K,
//其实也可以用dfs 只要用两层list记录层数h即可 public void out(Node root){ List<List<String>> list = new ArrayList<>(); levelHelper(list, root, 0); for (List<String> strs : list) { for (String str : strs) { System.out.print(str + ","); } System.out.println(); } } private void levelHelper(List<List<String>> list, Node root, int h) { if (root == null) return; if (list.size() <= h) list.add(new ArrayList<>()); list.get(h).add(root.value); levelHelper(list, root.left, h + 1); levelHelper(list, root.middle, h + 1); levelHelper(list, root.right, h + 1); }
public static void printTreePlane(Node node){ if (node == null){ return; } Queue<Node> queue = new LinkedList<>(); queue.offer(node); while (!queue.isEmpty()){ // 这里的size相当与当前层的节点数量 int size = queue.size(); // 这里就是遍历当前层节点,输出结果 while (size > 0){ Node root = queue.poll(); System.out.print(root.value+","); if(root.left != null){ queue.offer(root.left); } if (root.right != null){ queue.offer(root.right); } size--; } System.out.print("\n"); } }
import java.util.*; public class Test{ public static void main(String[] args) { Node node = new Node("A"); node.left = new Node("B"); node.left.right = new Node("D"); node.right = new Node("C"); node.right.left = new Node("G"); node.right.right = new Node("K"); solve(node); } public static class Node{ public String value; public Node left; public Node middle; public Node right; public Node(String value) { this.value = value; } } private static void solve(Node root){ Queue<Node> queue = new ArrayDeque<>(); queue.add(root); int size = 1; int after = 0; while (!queue.isEmpty()){ Node poll = queue.poll(); System.out.print(poll.value+","); if(poll.left != null){ queue.add(poll.left); after ++; } if(poll.middle != null){ queue.add(poll.middle); after ++; } if(poll.right != null){ queue.add(poll.right); after ++; } size--; if(size == 0){ System.out.println(); size = after; after = 0; } } } }
public static List<List<String>> bfs(Node root){ Deque<Node> queue = new ArrayDeque<>(); queue.offer(root); List<List<String>> ans = new ArrayList<>(); while(!queue.isEmpty()){ int size = queue.size();//当前层的大小 List<String> res = new ArrayList<>(); for(int i=0;i<size;i++){ Node node = queue.poll(); res.add(node.value); if(node.left!=null){ queue.offer(node.left); } if(node.middle!=null){ queue.offer(node.middle); } if(node.right!=null){ queue.offer(node.right); } } ans.add(res); } return ans; }