我希望这是一个可以接受的问题。我理解递归的思维模式,我想先考虑基本案例,然后再考虑递归案例,但是对于一些更困难的 BST 问题,我只是空白,感觉就像在没有好的方向的情况下迷失了方向。
以链表为例,似乎有一种解决问题的模式,但 BT 似乎你知道或不知道。任何提示/指针?我似乎已经理解的唯一概念是,如果我正在处理空节点并且我想对它们或关于它们做些什么,我会把它作为一个案例
if(root == null)
//do something
或者如果我与空节点没有任何关系,那么我使用倒置的基本情况
if(root != null)
//do stuff
else
//do nothing for null case
但即便如此,我也会不知所措。我想这是一个我被困住并且不知道如何解决的问题的例子。我不一定要寻找答案,只是处理此类问题(和常规二叉树问题)的潜在策略。
编写一个方法numberNodes
来更改存储在二叉树中的数据,将从 1 开始的顺序整数分配给每个节点,以便前序遍历将产生按顺序(1、2、3 等)的数字。例如,给定由左下方的树引用的树,调用tree.numberNodes();
将覆盖现有数据,将节点值从 1 分配到 6,以便树的前序遍历将产生1, 2, 3, 4, 5, 6
。
你不要改变树的结构。您只是更改存储在数据字段中的值。您的方法应该返回树中有多少节点的计数。
假设您要将此方法添加到IntTree
如下定义的类中:
public class IntTree {
private IntTreeNode overallRoot;
...
}
再看一遍代码后,我想我应该用我int count
的方法来确定我是去左根还是右根,因为它是一个二叉搜索树,但我仍然无法实现这个功能......啊编码堵塞!