1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class BSTPlus extends BinarySearchTree<Integer, Object> { 5 public int numOfLeaf() { 6 return numOfLeaf(root); 7 } 8 9 // 两颗二叉树是否相同,是否互为镜像 10 // 翻转二叉树 11 // 前序遍历 12 // 后序遍历 13 // 深搜 叶子节点的个数 14 private int numOfLeaf(BSTNode node) { 15 if (node == null) 16 return 0; 17 if (node.left == null && node.right == null) 18 return 1; 19 return numOfLeaf(node.left) + numOfLeaf(node.right); 20 } 21 22 // 宽搜 第k层的节点数 23 public int numOfLevel(int k) { 24 return ((List) (levelOrder().get(k - 1))).size(); 25 } 26 27 // 是否为完全二叉树 28 public boolean isComplete() { 29 List<List<BSTNode<Integer, Object>>> list = levelOrder(); 30 for (int i = 0; i < list.size(); i++) { 31 List<BSTNode<Integer, Object>> l = list.get(i); 32 if (l.size() != (int) Math.pow(2, i) && i != list.size() - 1) { 33 return false; 34 } else if (i == list.size() - 1) { 35 for (int j = 0; j < l.size(); j++) { 36 BSTNode<Integer, Object> node = l.get(j); 37 if (node.num != (int) Math.pow(2, i) + j) 38 return false; 39 } 40 } 41 } 42 return true; 43 } 44 45 List l = new ArrayList(); 46 47 // BST区间搜索 dfs 把二叉树所有属于这个区间[1,10]的数全部找出来 48 public void search(int k1, int k2) { 49 search(root, k1, k2); 50 } 51 52 private void search(BSTNode<Integer, Object> node, int k1, int k2) { 53 if (node == null) 54 return; 55 int k = node.key; 56 if (k > k1) 57 search(node.left, k1, k2); 58 if (k >= k1 && k <= k2) 59 l.add(k); 60 if (k < k2) 61 search(node.right, k1, k2); 62 } 63 }