二叉树的性质:
- [题解1]:
对于任意一个满二叉树,其分支数B=2(no-1),其中no为终端节点数。
- [题解2]:
已知一棵度为m的树中有n1个度为1的节点、n2个度为2的节点…n_m个 度为m的节点,问该树中共有多少个叶子节点?
二叉树链式储存的分类:
图解:
二叉树的遍历:
递归算法实现:
先序遍历:
def preOrder(root):
if root is None:
return
print(root.val)
preOrder(root.left)
preOrder(root.right)
中序遍历:
def midOrder(root):
if root is None:
return
midOrder(root.left)
print(root.val)
midOrder(root.right)
后序遍历:
def postOrder(root):
if root is None:
return
postOrder(root.left)
postOrder(root.right)
print(root.val)
非递归实现:
先序遍历:
from queue import deque
def preOrder(root):
if root is None:
return None
q = deque()
q.append(root)
while q:
temp = q.pop()
print(temp.val)
if temp.right is not None:
q.append(temp.right)
if temp.left is not None:
q.append(temp.left)
中序遍历:
from queue import deque
def midOrder(root):
if root is None:
return None
q = deque()
q.append(root)
while q:
temp = q[-1]
while temp.left is not None:
q.append(temp.left)
temp = q[-1]
temp = q.pop()
print(temp.val)
while (temp.right is None) and q: # 一直找到右边不是空的为止,可能不存在右边不为空的
if q:
temp = q.pop()
print(temp.val)
# 出来了可能右边不为空,也可能q为空,但是q为空且temp.right不为空一样可以进栈
if temp.right is not None:
q.append(temp.right)
后序遍历:
层次遍历:
from queue import Queue
def layerOrder(root):
q = Queue()
q.put(root)
while not q.empty():
temp = q.get()
print(temp.val)
if temp.left is not None:
q.put(temp.left)
if temp.right is not None:
q.put(temp.right)