java - 无法理解递归算法中的最终调用返回什么,提供了算法示例
问题描述
所以我有这个伪代码算法,我接受了一次采访,它遍历二叉树并返回某种值。在用绘制的二叉树跟踪算法之后,我不断猜测自己是否2 + valOne + valTwo
在算法返回到 root 时返回最终调用。当我应用它时,根据我的计算返回的数字是 2*(树的高度),我想检查我的答案和逻辑是否正确。根据练习表的答案声称它计算了树中边的数量,但我根本不明白这是怎么可能的。
public int foo(r){
if(r is leaf) return 0;
else{
valOne = foo(r.leftChild());
valTwo = foo(r.rightChild());
return 2 + valOne + valTwo;
}
那么是否return 2 + valOne + valTwo
也适用于整个树的根?如果是的话,我的回答会不正确吗?感谢你们!
解决方案
对于每个非叶节点都有左子节点和右子节点的二叉树,这确实计算了边的数量。
valOne = foo(r.leftChild()); // count edges in left subtree
valTwo = foo(r.rightChild()); //count edges in right subtree
return 2 + valOne + valTwo; // 2 (the edges from this node to its children) + edges in sub trees
if(r is leaf) return 0; //leaf nodes have no edges pointing out
推荐阅读
- python - PyQt5 - 无法根据 QDialog 接受的信号调用函数
- vb.net - 根据时间从数据库中获取值
- arrays - 数组在 PowerShell 中的函数之外没有输出
- java - 在java中读取yaml文件的嵌套元素
- java - Firebase 获取值返回 NULL 值
- python - 如何在 Python 内置而不是 ai,aj = aj,ai 中使用 swap 方法进行排序
- google-sheets - Bitly APIv4 电子表格集成
- python - 气流找不到 json 文件
- node.js - 如何在快递上禁用自动 HEAD?
- symfony - FOS Elastica 如何为 2 级实体应用 indexable_callback?