遍历二叉树
二叉树
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);
}
}
}
运行结果