繁体   English   中英

如何为 BinaryTree 编写 left() 和 right() 方法<t> class</t>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM