- 先序遍历——根节点→左子树→右子树
递归形式:
def preorder(self,root):
if root == None:
return
print(root.val)
preorder(root.left)
preorder(root.right)
非递归形式:(利用栈的性质)
def preorder(self,root):
stack = [root]
while len(stack)>0:
print(root.val)
if root.right is not None:
stack.append(root.right)
if root.left is not None:
stack.append(root.left)
root =stack.pop()
- 中序遍历——左子树→根节点→右子树
递归形式:
def inorder(self, root):
if root == None:
return
inorder(root.left)
print(root.val)
inorder(root.right)
非递归:
#先解决左节点,后解决右节点,根节点顺带。
def inorder(self,root):
stack=[]
pos=root
while pos is not None or len(stack)>0:
if pos is not None:
stack.append(pos)
pos = pos.left
else:
pos = stack.pop()
print(pos.val)
pos=pos.right
- 后序遍历——左子树→右子树→根节点
递归:
def postorder(self,root):
if root ==None:
return
postorder(root.left)
postorder(root.right)
print(root.val)
非递归:
# 使用两个栈结构
# 第一个栈进栈顺序:左节点->右节点->跟节点
# 第一个栈弹入第二个栈顺序: 跟节点->右节点->左节点
# 第二个栈的弹出顺序:左节点->右节点->根节点
def postorder(self,root):
stack=[root]
stack2=[]
while len(stack)>0:
root = stack.pop()
stack2.append(root)
if root.left is not None:
stack.append(root.left)
if root.right is not None:
stack.append(root.right)
while len(stack2)>0:
print(stack2.pop().val)
- 层次遍历(从上到下,从左到右遍历)
def breadth_travel(self, root):
if root ==None:
return
queue =[]
queue.append(root)
while queue:
node = queue.pop(0)
print (node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
- 二叉树节点个数
def treeNode(node):
if node is None:
return 0
nums =treeNode(node.left)
nums += treeNode(node.right)
return nums+1
- 二叉树的最大深度
def treeDepth(node):
if node is None:
return 0
ldepth = treedepth(node.left)
rdepth = treedepth(node.right)
return (max(ldepth,rdepth)+1)