- 反转二叉树
输入:
输出:
- 实现BST的层级遍历方法
因为两个题需要相互配合展示,所以代码放在一个类里,就不单独拿出来了。
package week7.day38;
import java.util.ArrayDeque;
import java.util.Queue;
/**
* @author : 魏铭志
* @date : 2020/4/15 20:20
*/
public class Test2 {
public static void main(String[] args) {
int[] arr = {4, 2, 7, 1, 3, 6, 9};
TreeNode tree = buildTree(arr);
System.out.println(treeString(tree));
TreeNode newTree = flipBinaryTree(tree);
System.out.println(treeString(newTree));
}
public static TreeNode buildTree(int[] arr) {
Queue<TreeNode> queue = new ArrayDeque<>();
TreeNode tree = new TreeNode(arr[0]);
queue.add(tree);
int index = 1;
do {
TreeNode root = queue.poll();
root.left = new TreeNode(arr[index++]);
root.right = new TreeNode(arr[index++]);
queue.add(root.left);
queue.add(root.right);
} while (index != arr.length);
return tree;
}
public static String treeString(TreeNode tree) {
if (tree == null) {
return "[]";
}
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(tree);
StringBuilder builder = new StringBuilder("[");
while (!queue.isEmpty()) {
TreeNode root = queue.poll();
builder.append(root.val).append(", ");
if (root.left != null) {
queue.add(root.left);
}
if (root.right != null) {
queue.add(root.right);
}
}
builder.delete(builder.length() - 2, builder.length());
builder.append("]");
return builder.toString();
}
private static TreeNode flipBinaryTree(TreeNode tree) {
if (tree == null) {
return null;
}
TreeNode right = flipBinaryTree(tree.right);
TreeNode left = flipBinaryTree(tree.left);
tree.left = right;
tree.right =left;
return tree;
}
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}