用python用函数求二叉树一个节点的所有左孩子不用考虑是否有左孩子和是否为空结点
时间: 2024-05-15 07:13:34 浏览: 6
假设二叉树的节点定义如下:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
```
则可以使用递归函数来求一个节点的所有左孩子:
```python
def get_all_left_children(node):
"""
获取一个节点的所有左孩子
"""
if not node: # 如果节点为空,返回空列表
return []
if not node.left: # 如果节点没有左孩子,返回空列表
return []
res = [] # 用于存放所有左孩子的列表
left = node.left # 获取节点的左孩子
res.append(left.val) # 将左孩子的值加入到结果列表中
res.extend(get_all_left_children(left)) # 递归获取左孩子的所有左孩子,并将结果加入到结果列表中
return res
```
这个函数的实现过程比较简单,递归地获取节点的左孩子,并将左孩子的值加入到结果列表中,最后返回结果列表即可。需要注意的是,在递归的过程中,需要判断节点是否为空和是否有左孩子,否则会出现错误。
相关问题
写一个递归函数,交换二叉树t中所有结点的左子树和右子树。
递归函数的思路是,首先判断当前节点是否为空,如果为空则直接返回。否则,交换当前节点的左子树和右子树,然后递归地对左子树和右子树进行交换。下面是一个示例的递归函数实现:
```python
def swap_tree(t):
if not t: # 如果当前节点为空,直接返回
return
t.left, t.right = t.right, t.left # 交换当前节点的左右子树
swap_tree(t.left) # 递归对左子树进行交换
swap_tree(t.right) # 递归对右子树进行交换
```
使用该递归函数可以交换二叉树中所有节点的左子树和右子树。在函数中,通过判断当前节点是否为空来结束递归,然后通过交换左右子树的位置来实现交换。最后,再递归地对左子树和右子树进行同样的操作,即不断向下递归交换左右子树。整个过程会遍历每个节点并交换其左右子树,从而实现了交换整个二叉树的左右子树的目的。
以二叉链表作为二叉树的存储结构交换二叉树每个结点的左孩子和右孩子
以下是交换二叉树每个节点左右孩子的Python递归算法:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def invertTree(root: TreeNode) -> TreeNode:
if not root:
return None
root.left, root.right = invertTree(root.right), invertTree(root.left)
return root
```
以上代码中,我们定义了一个`TreeNode`类来表示二叉树的节点,其中`val`表示节点的值,`left`和`right`分别表示节点的左右孩子。`invertTree`函数接收一个二叉树的根节点作为参数,返回交换左右孩子后的二叉树的根节点。
在`invertTree`函数中,我们首先判断当前节点是否为空,如果为空则直接返回`None`。否则,我们交换当前节点的左右孩子,然后递归地交换当前节点的左右子树,并返回当前节点。