您的位置:首页 > 其它

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

2017-08-15 17:46 399 查看

遍历二叉树



二叉树

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);
}
}

}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: