leetcode 222 二分完全二叉樹

2021-10-10 19:26:42 字數 1569 閱讀 5054

解法一:dfs暴力求解

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

countnodes

(self, root: treenode)

->

int:

self.result =

0def

dfs(node):if

not node:

return

self.result +=

1 dfs(node.left)

dfs(node.right)

dfs(root)

return self.result

解法二:二分

核心思路:完全二叉樹中,左子樹和右子樹中至少有一顆完美的完全二叉樹(可以簡單思考一下)

在這個思路下,每次檢測左右節點的最左路徑,如果相等,說明右子樹可能不完美,若不相等,則左子樹一定不完美,此演算法可實現o(log^2n)的複雜度

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

countnodes

(self, root: treenode)

->

int:

self.result =

0def

dive

(node):if

not node:

return

h1, h2 =0,

0 n1, n2 = node.left, node.right

while n1:

h1 +=

1 n1 = n1.left

while n2:

h2 +=

1 n2 = n2.left

if h1 == h2:

# 右子樹可能不完美

self.result +=(1

<< h1)

dive(node.right)

else

:# 左子樹不完美

self.result +=(1

<< h2)

dive(node.left)

dive(root)

return self.result

LeetCode 222 完全二叉樹的節點個數

給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6 輸出 6方法一 def...

Leetcode 222 完全二叉樹的節點個數

給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6輸出 6 解題思路 二分...

Leetcode 222 完全二叉樹的節點個數

給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹 的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 輸出 6 1 public class so...