这是我的二元搜索树类:
public class BinarySearchTree {
class BSTNode {
int data;
BSTNode rchild;
BSTNode lchild;
//constructor
public BSTNode(int n){
data=n;
lchild=rchild=null;
}
}
private BSTNode root;
private int size;
public BinarySearchTree() {
root = null;
size = -1;
}
public boolean insert(int n) {
if (root == null)
root = new BSTNode(n);
else
insert(n, root);
return true;
}
private void insert(int n, BSTNode r) {
if (r.data > n)
if (r.lchild == null)
r.lchild = new BSTNode(n);
else
insert(n, r.lchild);
else
if (r.data < n)
if (r.rchild == null)
r.rchild = new BSTNode(n);
else
insert(n, r.rchild);
}
}
实际上我发现编写一个检查我的树是否是完整二叉树的方法时遇到了困难。有人可以为我提供解决方案吗。
我会遵循这个定义: 完整二叉树:除最后一级之外的每个级别都已完全填充,所有节点都是左对齐的。
答案 0 :(得分:0)
您需要对BSTNode
的实施进行一些修改,但我相信这应该符合您的需求。基本思想是递归遍历树并确保&#34;完成&#34;每个子树都满足属性。
boolean checkBinaryTreeCompleteness(TreeNode root) {
if (root != null) {
if (root.right == null && root.left == null) {
return true;
}
if (root.right != null && root.left != null) {
return checkBinaryTreeCompleteness(root.left) && checkBinaryTreeCompleteness(root.right);
}
}
return false;
}