求二叉树的深度

163 阅读1分钟

本文用 SwiftC 两种语言来完成二叉树的深度的计算, 用递归的方式来计算, 比较简单, 又高效, 但是内存开销会大些. 所以具体还是要根据自己的情况来确定用哪种方式.

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;
}

二者的效率对比

image.png

此结果来源于 leetcode