章娅萝 发表于 2025-6-8 22:04:31

算法day13——二叉树(3)

目录


[*]完全二叉树的节点个数
[*]平衡二叉树110
[*]二叉树的所有路径257
[*]左叶子之和404
一、完全二叉树的节点个数

 https://leetcode.cn/problems/count-complete-tree-nodes/description/?envType=problem-list-v2&envId=8At1GmaZ

  方法一:用普适的递归方法来做,这样会遍历到每一个节点。没有利用完全二叉树的性质。
class Solution {
    public int countNodes(TreeNode root) {
      if(root == null){
            return 0;
      }
      return countNodes(root.left) + countNodes(root.right) + 1;
    }
}
//时间复杂度:O(n)  方法二:充分利用了“完全二叉树”的结构,避免了重复计算完整子树的节点个数,大大减少了递归次数,因此时间复杂度从 O(n) 降低到了 O((log n)^2),在大数据量时性能优势明显。

[*]完全二叉树的特点是:左子树深度等于右子树深度 ⇒ 整个左子树是满二叉树,节点数是 2^depth - 1。
[*]利用这一性质,可以直接跳过对整棵子树的递归计算,用位运算直接得出节点数。
class Solution {    public int countNodes(TreeNode root) {      if(root == null){            return 0;      }      int left = countLevel(root.left);      int right = countLevel(root.right);      if(left == right){            return countNodes(root.right) + (1
页: [1]
查看完整版本: 算法day13——二叉树(3)