擅长:python、mysql、java
<p>对于保存的当前字段,使用递归无法真正得到所需的结果。每个节点只“知道”其当前状态,这就是为什么树的右侧将永远保持在深度1。你知道吗</p>
<p>我们想到的一个解决方案是添加<code>right children</code>和<code>left children</code>数量字段。这将有助于跟踪余额。它看起来是这样的:</p>
<pre><code> class Node(object):
def __init__(self, val):
self.val = val
self.left = None
self.right = None
self.right_count = 0
self.left_count = 0
self.even_depth = True
self.needed_to_even = 1
def insert(self, val):
if self.left is None:
self.left = Node(val)
self.left_count += 1
elif self.right is None:
self.right = Node(val)
self.right_count += 1
elif self.left_count > self.right_count + self.needed_to_even or not self.even_depth:
self.even_depth = False
if self.left_count == self.right_count:
self.needed_to_even *= 2
self.even_depth = True
self.right.insert(val)
self.right_count += 1
else:
self.left.insert(val)
self.left_count += 1
</code></pre>