TreeNode类
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode() {};
public TreeNode(int val) {this.val = val;}
public TreeNode(int val, TreeNode left, TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
层序遍历构建完全二叉树
public TreeNode createTreeByLayerOrder(List<Integer> arr) {
if (arr.size() == 0) {
return new TreeNode();
}
int index = 0;
Queue<TreeNode> q = new LinkedList<>();
TreeNode root = new TreeNode(arr.get(index++));
q.offer(root);
while (!q.isEmpty() && index < arr.size()) {
TreeNode now = q.peek();
q.poll();
if (arr.get(index) != null) {
now.left = new TreeNode(arr.get(index));
q.offer(now.left);
}
index++;
if (index >= arr.size()) {
break;
}
if (arr.get(index) != null) {
now.right = new TreeNode(arr.get(index));
q.offer(now.right);
}
index++;
}
return root;
}
层序遍历二叉树
public void layerOrder(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while (!q.isEmpty() && q.peek() != null) {
for (int i = q.size(); i > 0; i--) {
TreeNode now = q.peek();
q.poll();
System.out.print(now.val + " ");
if (now.left != null) {
q.offer(now.left);
}
if (now.right != null) {
q.offer(now.right);
}
}
System.out.println();
}
System.out.println();
}
根据val通过前序遍历查询对应结点
public TreeNode findNodeByVal(TreeNode root, int val) {
if (root == null) {
return null;
}
if (root.val == val) {
return root;
}
TreeNode resultNode = findNodeByVal(root.left, val);
if (resultNode == null) {
resultNode = findNodeByVal(root.right, val);
}
return resultNode;
}
打印结点的值
public void showNode(TreeNode node) {
if (node == null) {
System.out.println();
} else {
System.out.println(node.val);
}
}