以二叉链表作为二叉树的存储结构,编写以下算法: 1.统计二叉树的叶结点个数。 2.判别两棵树是否相等。 3.交换二叉树每个结点的左孩子和右孩子。 4.设计二叉树的双序遍历算法。代码
时间: 2024-03-17 19:44:32 浏览: 71
好的,以下是基于二叉链表的二叉树算法实现:
1. 统计二叉树的叶结点个数
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_leaf_nodes(root: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
return count_leaf_nodes(root.left) + count_leaf_nodes(root.right)
```
2. 判别两棵树是否相等
```python
def is_same_tree(p: TreeNode, q: TreeNode) -> bool:
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 invert_tree(root: TreeNode) -> TreeNode:
if not root:
return None
root.left, root.right = root.right, root.left
invert_tree(root.left)
invert_tree(root.right)
return root
```
4. 设计二叉树的双序遍历算法
```python
def double_order_traversal(root: TreeNode) -> List[int]:
if not root:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
res.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res[::-1] + res
```
希望我的回答能够帮助到您!
阅读全文