leetcode_222. 完全二叉树的节点个数
        【摘要】  目录 
一、题目内容 
二、解题思路 
三、代码 
一、题目内容 
 
 给出一个完全二叉树,求出该树的节点个数。 
 说明: 
 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 
 
 
 示例: 
 ...
    
    
    
    目录
一、题目内容
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6输出: 6
二、解题思路
1.先左后右访问得到子树高度;
2.相等则说明左子树是满二叉树,判断右子树节点个数;
3.不相等则说明右子树高度小于左子树,则判断左子树高度即可;
例:
4+1+1(1->2->4->5,3,6)
三、代码
  
   - 
    
     
    
    
     
      # Definition for a binary tree node.
     
    
- 
    
     
    
    
     
      class TreeNode:
     
    
- 
    
     
    
    
      def __init__(self, x):
     
    
- 
    
     
    
    
     
       self.val = x
     
    
- 
    
     
    
    
     
       self.left = None
     
    
- 
    
     
    
    
     
       self.right = None
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      def __repr__(self):
     
    
- 
    
     
    
    
      return str(self.val)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class Solution:
     
    
- 
    
     
    
    
      def countNodes(self, root: TreeNode) -> int:
     
    
- 
    
     
    
    
      if root is None:
     
    
- 
    
     
    
    
      return 0
     
    
- 
    
     
    
    
     
       left_h = self.get_height(root.left)
     
    
- 
    
     
    
    
     
       right_h = self.get_height(root.right)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      if left_h == right_h:
     
    
- 
    
     
    
    
      return self.countNodes(root.right) + (1 << left_h)
     
    
- 
    
     
    
    
      else:
     
    
- 
    
     
    
    
      return self.countNodes(root.left) + (1 << right_h)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      def get_height(self, root):
     
    
- 
    
     
    
    
      if root is None:
     
    
- 
    
     
    
    
      return 0
     
    
- 
    
     
    
    
     
       h = 0
     
    
- 
    
     
    
    
      while root is not None:
     
    
- 
    
     
    
    
     
       h += 1
     
    
- 
    
     
    
    
     
       root = root.left
     
    
- 
    
     
    
    
      return h
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      if __name__ == '__main__':
     
    
- 
    
     
    
    
     
       a = TreeNode(1)
     
    
- 
    
     
    
    
     
       a.left = TreeNode(2)
     
    
- 
    
     
    
    
     
       a.right = TreeNode(3)
     
    
- 
    
     
    
    
     
       a.left.left = TreeNode(4)
     
    
- 
    
     
    
    
     
       a.left.right = TreeNode(5)
     
    
- 
    
     
    
    
     
       a.right.left = TreeNode(6)
     
    
- 
    
     
    
    
      # a.right.right = TreeNode(7)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
       s = Solution()
     
    
- 
    
     
    
    
     
       ans = s.countNodes(a)
     
    
- 
    
     
    
    
     
       print(ans)
     
    
 文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/110174149
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)