以二叉链表作为二叉树的存储结构,编写以下算法: 1.统计二叉树的叶结点个数。 2.判别两棵树是否相等。 3.交换二叉树每个结点的左孩子和右孩子。 4.设计二叉树的双序遍历算法
时间: 2024-01-23 07:46:24 浏览: 52
1. 统计二叉树的叶结点个数
```python
def count_leaf_node(root):
if not root:
return 0
if not root.left and not root.right:
return 1
return count_leaf_node(root.left) + count_leaf_node(root.right)
```
2. 判别两棵树是否相等
```python
def is_same_tree(p, q):
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return is_same_tree(p.left, q.left) and is_same_tree(p.right, q.right)
```
3. 交换二叉树每个结点的左孩子和右孩子
```python
def swap_left_right(root):
if not root:
return
root.left, root.right = root.right, root.left
swap_left_right(root.left)
swap_left_right(root.right)
```
4. 设计二叉树的双序遍历算法
```python
def double_order_traversal(root):
if not root:
return []
stack = [(root, False)]
pre_order = []
post_order = []
while stack:
node, visited = stack.pop()
if visited:
post_order.append(node.val)
else:
pre_order.append(node.val)
stack.append((node, True))
if node.right:
stack.append((node.right, False))
if node.left:
stack.append((node.left, False))
return pre_order + post_order[::-1]
```
其中,pre_order代表先序遍历结果,post_order代表后序遍历结果。先进行先序遍历,遍历到节点时,将节点标记为visited,然后将其加入post_order数组中。最后,返回先序遍历结果与后序遍历结果的拼接。
阅读全文