二叉树的遍历以及按层打印

来源:互联网 发布:mysql数据库连接 编辑:程序博客网 时间:2024/05/29 04:48

遍历二叉树

二叉树

二叉树

public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}

遍历

    public static void printTree(TreeNode root) {         //        Queue<TreeNode> quere = new LinkedList<TreeNode>();        TreeNode tmp = root;        quere.offer(tmp);        while (quere.size() != 0) {            tmp = quere.poll();            System.out.println(tmp.val);            if (tmp.left != null) {                quere.offer(tmp.left);            }            if (tmp.right != null) {                quere.offer(tmp.right);            }        }    }    public static void main(String[] args) {        TreeNode root = new TreeNode(1);        root.left = new TreeNode(2);        root.right = new TreeNode(3);        TreeNode left2 = root.left;        TreeNode right2 = root.right;        left2.left = new TreeNode(4);        right2.left = new TreeNode(5);        right2.right = new TreeNode(6);        TreeNode left3 = right2.left;        left3.left = new TreeNode(7);        left3.right = new TreeNode(8);        printTree(root);    }

运行结果
这里写图片描述

按照层次来打印
这里写图片描述

主要是需要考虑换行
需要2个变量
last 表示正在打印的当前行的最右节点
nlast 表示下一行的最右节点
如果当前打印的和last相等 就应该换行
换行 last =nlast

    public static int[][] printTree(TreeNode root) {        List<List<TreeNode>> result = new ArrayList<List<TreeNode>>();        List<TreeNode> li = new ArrayList<TreeNode>();        Queue<TreeNode> quere = new LinkedList<TreeNode>();        TreeNode tmp = root;        TreeNode last = root;        TreeNode nlast = null;        quere.offer(tmp);        while (quere.size() != 0) {            tmp = quere.poll();            li.add(tmp);            if (tmp.left != null) {                quere.offer(tmp.left);                nlast = tmp.left;            }            if (tmp.right != null) {                quere.offer(tmp.right);                nlast = tmp.right;            }            if (tmp.val == last.val) {                last = nlast;                result.add(li);                li = new ArrayList<TreeNode>();            }        }        int[][] resultarr = new int[result.size()][];        for (int i = 0; i < result.size(); i++) {            int[] a = new int[result.get(i).size()];            for (int j = 0; j < result.get(i).size(); j++) {                a[j] = result.get(i).get(j).val;            }            resultarr[i] = a;        }        return resultarr;    }    public static void main(String[] args) {        TreeNode root = new TreeNode(1);        root.left = new TreeNode(2);        root.right = new TreeNode(3);        TreeNode left2 = root.left;        TreeNode right2 = root.right;        left2.left = new TreeNode(4);        right2.left = new TreeNode(5);        right2.right = new TreeNode(6);        TreeNode left3 = right2.left;        left3.left = new TreeNode(7);        left3.right = new TreeNode(8);        int[][] printTree = printTree(root);        for (int[] string : printTree) {            System.out.println();            for (int i : string) {                System.out.print(i);            }        }    }

运行结果
这里写图片描述

原创粉丝点击