c语言给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。
时间: 2024-09-19 16:13:49 浏览: 17
在C语言中,你可以使用递归的方法来翻转一棵二叉树。下面是一个简单的示例代码,它首先定义了一个二叉树节点的结构体,然后通过递归翻转这棵树。
首先,我们定义一个二叉树节点的结构体:
```c
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
```
然后,我们编写一个函数来翻转这棵二叉树:
```c
Node* reverseTree(Node* root) {
if (root == NULL) {
return NULL;
}
Node* temp = reverseTree(root->left);
Node* temp2 = reverseTree(root->right);
root->left = temp2;
root->right = temp;
return root;
}
```
这个函数首先检查根节点是否为空。如果为空,那么返回NULL。否则,它递归地翻转左子树和右子树,并将它们存储在临时变量中。然后,它将新的左子树和右子树分别赋值给根节点的左子节点和右子节点。最后,它返回翻转后的根节点。
注意,这个函数会直接修改传入的二叉树。如果你不希望修改原始的二叉树,那么你需要创建一个新的节点来保存翻转后的结果。你可以在调用这个函数之前创建好一个新的节点,并在调用之后将新节点赋值给原来的根节点。这样就可以得到一个未被修改的原始二叉树。
相关问题
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
好的,这个问题我可以回答。可以使用递归的方法,先翻转左子树,再翻转右子树,最后交换左右子树的位置。代码实现如下:
```
struct TreeNode* invertTree(struct TreeNode* root){
if(root == NULL){
return NULL;
}
struct TreeNode* left = invertTree(root->left);
struct TreeNode* right = invertTree(root->right);
root->left = right;
root->right = left;
return root;
}
```
给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。
好的,以下是翻转二叉树的 Python 代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def invert_tree(root):
if not root:
return None
# 交换左右子树
root.left, root.right = root.right, root.left
# 递归翻转左右子树
invert_tree(root.left)
invert_tree(root.right)
return root
```
这段代码首先定义了一个二叉树节点的类 `TreeNode`,包含节点的值 `val`、左子节点 `left` 和右子节点 `right`。然后定义了一个函数 `invert_tree`,接受一个二叉树的根节点 `root` 作为参数,返回翻转后的二叉树的根节点。
在函数中,首先判断根节点是否为空,如果为空则直接返回 `None`。否则,交换根节点的左右子树,即 `root.left` 和 `root.right` 的位置。然后递归地翻转左右子树,即调用 `invert_tree(root.left)` 和 `invert_tree(root.right)`。最后返回翻转后的根节点 `root`。
需要注意的是,这里的二叉树是一个非平衡的二叉树,如果要翻转的是平衡的二叉树(例如每个节点的左子树深度等于右子树深度),那么可以直接对原二叉树进行中序遍历即可翻转整个二叉树。但是这个算法通常在二叉树可能不平衡的情况下使用,因为平衡的二叉树在遍历时可能存在一些特殊情况,需要额外的处理。