数据结构与算法之交换二叉树左右子树

交换二叉树左右子树

数据结构与算法之交换二叉树左右子树

题目

思想

递归交换即可,前/中/后序皆可

代码实现

简洁版

public TreeNode swapLeftAndRightNode(TreeNode root) {
    if(root!=null){
        swapLeftAndRightNode(root.left);
        swapLeftAndRightNode(root.right);
        TreeNode temp=root.left;
        root.left=root.right;
        root.right=temp;
    }
   
}

重构版

/**
 * 交换左右子树
 *
 * @param root 根节点
 * @return 交换后的新树
 */
public TreeNode swapLeftAndRightNode(TreeNode root) {
    if (root != null) {
        swapLeftAndRightNode(root.left);
        swapLeftAndRightNode(root.right);
	swap(root);
    }
    return root;
}

private void swap(TreeNode root) {
    if (root != null) {
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个问题可以通过递归的方式来解决。首先,判断当前结点是否为空,如果不为空,则交换左右子树,并递归处理左右子树。具体实现代码如下: ``` void invertTree(TreeNode* root) { if (root == NULL) { return; } swap(root->left, root->right); invertTree(root->left); invertTree(root->right); } ``` 需要注意的是,该算法需要用到树的遍历,时间复杂度为O(n),其中n为树中结点的个数。 ### 回答2: 要编写一个交换二叉树中所有结点的左右子树算法,可以使用递归的方式来实现。首先,我们需要定义一个二叉树数据结构,包括一个值和左右子树的指针。 算法的实现步骤如下: 1. 检查当前节点是否为空,若为空则返回。 2. 交换当前节点的左右子树。 3. 递归调用函数交换当前节点的左子树。 4. 递归调用函数交换当前节点的右子树。 下面是一个示例的代码实现: ``` class Node: def __init__(self, value): self.value = value self.left = None self.right = None def swap_subtrees(root): # 检查当前节点是否为空 if root is None: return # 交换当前节点的左右子树 root.left, root.right = root.right, root.left # 递归调用函数交换当前节点的左子树 swap_subtrees(root.left) # 递归调用函数交换当前节点的右子树 swap_subtrees(root.right) ``` 在这个算法中,我们首先检查当前节点是否为空,若为空则直接返回。然后我们交换当前节点的左右子树,接着递归调用函数交换当前节点的左子树和右子树,从而完成整个二叉树左右子树交换。 这样,通过递归地调用这个函数,我们可以在二叉树交换所有节点的左右子树。 ### 回答3: 要编写一个算法交换二叉树中所有节点的左右子树,可以使用递归的方式实现。以下是一个可能的实现方式: 1. 如果树为空,返回空。 2. 将根节点的左子树和右子树交换,即将左子树保存在一个临时变量中,然后将右子树赋值给左子树,最后将临时变量赋值给右子树。 3. 递归调用函数,将左子树作为参数传入。 4. 递归调用函数,将右子树作为参数传入。 5. 返回根节点。 递归调用会依次交换每个节点的左右子树,直到到达叶子节点为止。以下是一个示例代码: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def invertTree(root): if root is None: return None # 交换左右子树 temp = root.left root.left = root.right root.right = temp # 递归调用函数 invertTree(root.left) invertTree(root.right) return root # 创建一个二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) # 调用函数交换二叉树左右子树 new_root = invertTree(root) ``` 通过调用`invertTree(root)`来实现交换二叉树中所有节点的左右子树,并且将新的根节点保存在`new_root`中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

five-five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值