本文用 Swift 和 C 两种语言来完成二叉树的深度的计算, 用递归的方式来计算, 比较简单, 又高效, 但是内存开销会大些. 所以具体还是要根据自己的情况来确定用哪种方式.
Swift 求二叉树的深度
// 结点定义
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init(_ val: Int) {
self.val = val
self.left = nil
self.right = nil
}
}
class Solution {
func maxDepth(_ root: TreeNode?) -> Int {
// 递归结束条件
guard let node = root else {
return 0
}
// 各叶子深度
let leftH = maxDepth(node.left)
let rightH = maxDepth(node.right)
// 总深度
let height = leftH > rightH ? leftH + 1 : rightH + 1
return height
}
}
C 求二叉树的深度
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int maxDepth(struct TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftH = maxDepth(root->left);
int rightH = maxDepth(root->right);
int height = leftH > rightH ? leftH + 1 : rightH + 1;
return height;
}
二者的效率对比
此结果来源于 leetcode