我尝试创建一个名为 singleParent()
的方法,该方法计算BST中只有1个子节点的节点数。出于某种原因,我的singleParent()
方法返回0。
我的代码:
二叉树
public abstract class BinaryTree {
private TreeNode root;
public BinaryTree() {
this.root = null;
}
public void setRoot(TreeNode node) {
this.root = node;
}
public TreeNode getRoot() {
return this.root;
}
public boolean isEmpty() {
return (this.root == null);
}
public int singleParent() {
return getSingleParents(this.root, 0);
}
private int getSingleParents(TreeNode t, int count) {
if(t != null) {
if(t.getLeft() == null && t.getRight() != null)
count++;
else if(t.getLeft() != null & t.getRight() == null)
count++;
getSingleParents(t.getLeft(), count);
getSingleParents(t.getRight(), count);
}
return count;
}
public void swapSubtrees() {
doSwap(this.root);
}
private void doSwap(TreeNode p) {
if(p != null) {
TreeNode temp = p.getLeft();
p.setLeft(p.getRight());
p.setRight(temp);
doSwap(p.getLeft());
doSwap(p.getRight());
}
}
public void inorder() {
doInorderTraversal(this.root);
}
private void doInorderTraversal(TreeNode t) {
if(t != null) {
doInorderTraversal(t.getLeft());
System.out.print(t.getValue() + " ");
doInorderTraversal(t.getRight());
}
}
public abstract void insert(Comparable item);
public abstract TreeNode find(Comparable key);
} // end of class
我的主要方法:
public static void main(String[] args) {
BinaryTree bst = new BinarySearchTree();
bst.insert(14);
bst.insert(4);
bst.insert(15);
bst.insert(3);
bst.insert(9);
bst.insert(18);
bst.insert(7);
bst.insert(16);
bst.insert(20);
bst.insert(5);
bst.insert(17);
int count = bst.singleParent();
System.out.println(count);
}
这会创建一个如下所示的树:
14
/ \
4 15
/ \ \
3 9 18
/ / \
7 16 20
/ \
5 17
所以count
应该等于4,因为有4个节点只有1个孩子。非常感谢任何帮助。
答案 0 :(得分:0)
For some reason, my singleParent() method is returning 0.
您进行递归调用getSingleParents(t.getLeft(), count);
和getSingleParents(t.getRight(), count);
,但忽略了他们的返回值。
由于这个原因,该方法只检查根节点(14)是否是单个父节点,而不是它。
事实上,您不需要count
中的getSingleParents
参数:
private int getSingleParents(TreeNode t) {
int count = 0;
if(t != null) {
if(t.getLeft() == null && t.getRight() != null)
count++;
else if(t.getLeft() != null & t.getRight() == null)
count++;
count += getSingleParents(t.getLeft());
count += getSingleParents(t.getRight());
}
return count;
}