[英]How do I write the left() and right() methods for a BinaryTree<T> class
我目前正在学习数据结构和算法课程。 最后 class,我的教授在板上放了一些代码来解释如何编写size()
, height()
和left()
/ right()
方法来教我们两个平衡,以备测验。
他在板上编写了您在下面看到的代码,但他提到虽然他犯了错误,但现在要专注于逻辑,并且他必须运行一些测试才能理解他的错误。
public class BT<T> {
TreeNode<T> root;
BT<T> myTree;
//size
public int size() {
if(this.isEmpty())
return 0;
return (1 + this.left().size() + this.right().size());
}
//isEmpty()
public boolean isEmpty() {
return (root == null);
}
//left
public BT<T> left() {
return root.left;
}
public BT<T> right() {
return root.right;
}
}
周末,我试图自己解决这个问题,因为在我教授的办公时间,由于有大量学生在期中访问他,他无法编写代码。
修复此方法的方法是什么?
编辑:
这是TreeNode<T>
class
class TreeNode<T> {
T data;
TreeNode<T> left;
TreeNode<T> right;
}
它位于同一个 package 内的另一个 class 内。
由于左右不一定要暴露,而是属于内部(非公共)TreeNode 的方法移到那里。
return root == null ? 0 : root.size();
class TreeNode<T> {
T data;
TreeNode<T> left;
TreeNode<T> right;
TreeNode<T> left() {
return left;
}
TreeNode<T> right() {
return right;
}
int size() {
int n = 1;
if (left != null) {
n += left.size();
} else if (right != null) {
n += right.size();
}
return n;
}
}
没有子树的公共概念,容器 class BT
保存大小和根节点。
因此,拥有诸如left()
和right()
之类的吸气剂更像是一种风格问题。
如果,如您所说,TreeNode class 在另一个 class(内部类)中,则如果没有外部 class 的实例,则无法访问内部 class。
因此,如果您的 TreeNode class 在 class A 中定义,您需要一起创建它们:
A.TreeNode node = new A.TreeNode()
而不是仅在 BT class 内创建 TreeNode。
你可以看看解释在 java 中访问内部 class 的方法? 在我看来,这解释了问题以及解决方案。
如果我对内部 class 的假设是错误的,请告诉我,我会调整或删除我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.