【发布时间】:2023-03-15 20:08:01
【问题描述】:
如标题所述,我试图通过仅计算 BST 中同时具有左右子节点的节点来解决此问题。我正在努力思考解决这个问题的逻辑。
我想到了这样的事情。
首先,检查根是否为空,或者它是否有任何空子。接下来,向右遍历树并继续检查孩子,当条件满足时增加一个计数器。但是当我到达结束节点并需要返回一个有左孩子要遍历的节点时会发生什么?我有一个临时节点来跟踪最近的父节点,但是当我需要上一层以上时怎么办?我假设这个问题的答案是递归解决它,但我什至不知道从哪里开始。
这是我所拥有的:
public int fullNodes() {
int count = 0;
Node n = root;
Node temp = null;
if (n == null || n.left == null && n.right == null) return count;
count++; //increment count, since the root has children on both sides
temp = n; //hold the previous place
n = n.right; //go right
//Now what?
return count;
}
我在解决问题时仍然在努力递归思考,除了我的问题,你是如何学会递归思考的?只是大量的练习,还是有一些技巧和技巧可以用来解决问题?
【问题讨论】:
-
假设你有一棵二叉树,你想回答这个问题,“有多少个节点同时有左右孩子?”假设您已经知道左子树的答案(如果有的话),并且您已经知道右子树的答案(如果有的话)。如果您知道这两个答案,那么您将如何计算整棵树的答案?只关注这一点,不要担心你将如何遍历树。这就是您可以递归地考虑它的方式。
-
nodesWithLeftAndRight(node):如果节点为空,则结果为零。否则,结果为 nodeWithLeftAndRight(left node) + nodeWithLeftAndRight(right node) + (1 if left node and right node is not null, else 0)
标签: java recursion binary-search-tree