222. 完全二叉树的节点个数

给出一个完全二叉树,求出该树的节点个数。

说明:

完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例:

输入:
1
/ \
2 3
/ \ /
4 5 6

输出: 6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-complete-tree-nodes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def preorderTraversal(self, root):
        if not root:return []
        stack, res = [root], []
        while stack:
            root = stack.pop()
            if root:
                res.append(root.val)
                if root.right:
                    stack.append(root.right)
                if root.left:
                    stack.append(root.left)
        return res
    def countNodes(self, root: TreeNode) -> int:
        return len(self.preorderTraversal(root))
        

 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def depth(self, root: TreeNode) -> int:
        res=0
        while root:
            res+=1
            root=root.left
        return res
    def countNodes(self, root: TreeNode) -> int:
        if not root:return 0
        left,right=self.depth(root.left),self.depth(root.right)
        if left==right:
            return (1<<left)+self.countNodes(root.right)
        return (1<<right)+self.countNodes(root.left)
        

 

posted @ 2020-11-24 08:42  XXXSANS  阅读(130)  评论(0编辑  收藏  举报