首页 > 试题广场 >

三叉树的水平输出 三叉树的结构如上图。

[问答题]

三叉树的水平输出


三叉树的结构如上图。

要求:
1、任选一种编程语言,写代码,实现功能。

写函数,水平输出元素值。
A,
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);
    }

编辑于 2020-09-08 15:33:02 回复(0)
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");
        }

    }
编辑于 2020-09-09 12:53:12 回复(0)
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;
            }
        }
    }
}

发表于 2020-08-13 15:35:12 回复(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;
    }

发表于 2020-07-04 16:56:49 回复(0)