Mil*_*vić 2 java binary-tree preorder
我希望这是一个可以接受的问题.我理解递归的思维模式,我想要考虑基本情况然后是递归情况,但是考虑到一些比较困难的BST问题,我只是画空白而感觉就像我迷失了,没有一个好的方向.
以链接列表为例,似乎有一种模式可以解决问题,但BT似乎要么你知道也要不知道.任何提示/指针?我似乎已经解决的唯一概念是,如果我正在处理空节点并且我想对它们或它们做一些事情,我将把它作为一个案例
if(root == null)
//do something
Run Code Online (Sandbox Code Playgroud)
或者如果我没有与null节点有任何关系,那么我使用倒置的基本情况
if(root != null)
//do stuff
else
//do nothing for null case
Run Code Online (Sandbox Code Playgroud)
但即便如此,我还是会对下一步感到茫然.我想这是一个我遇到的问题的例子,不知道如何接近.我不一定在寻找答案,只是处理这类问题的潜在策略(以及常规的二叉树问题).
编写一个方法numberNodes来更改存储在二叉树中的数据,为每个节点分配以1开头的顺序整数,以便预先遍序遍历将按顺序生成数字(1,2,3等).例如,给定左下方树引用的树,调用tree.numberNodes();将覆盖现有数据,将节点值从1分配给6,以便生成树的预先遍历1, 2, 3, 4, 5, 6.
你不要改变树的结构.您只是更改存储在数据字段中的值.您的方法应返回树中有多少节点的计数.
假设您要将此方法添加到IntTree类中,如下所示:
public class IntTree {
private IntTreeNode overallRoot;
...
}
Run Code Online (Sandbox Code Playgroud)
在盯着代码之后,我想我应该用我int count的方法来确定我是否前往左根或右根,因为它是一个二叉搜索树但是我仍然无法实现这个功能......啊编码块!
Ted*_*opp 11
在考虑使用二叉树进行递归时,基本情况是一个空树,因此您可以在那里找到正确的轨道.另一个关键概念元素是根据根,左子树和右子树(其中任何一个可能为空)进行思考.
所以我会像这样打破你的样本问题:
有了它,你几乎有这个方法的大纲.这是我写它的方式:
public class IntTree {
private IntTreeNode overallRoot;
public int numberNodes() {
return numberNodes(overallRoot, 0);
}
/** Helper function */
private static int numberNodes(IntTreeNode node, int n) {
if (node != null) {
node.data = ++n; // preorder means we assign to node first
n = numberNodes(node.left, n);
n = numberNodes(node.right, n);
}
return n;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2542 次 |
| 最近记录: |