编写一个算法,将二叉树中所有结点的左子树、右子树相互交换
时间: 2024-09-28 09:15:58 浏览: 63
要编写一个算法来交换二叉树中所有节点的左右子树,首先我们需要遍历整个二叉树。对于每个节点,我们将它的左子树赋值给它的右子树,同时将原右子树(现在是左子树)赋值给它的左子树。这里有一个递归的方式来完成这个操作:
```csharp
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
public void SwapTreeNodes(TreeNode root) {
if (root != null) {
// 交换当前节点的左右子树
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// 递归处理左子树和右子树
SwapTreeNodes(root.left);
SwapTreeNodes(root.right);
}
}
```
这段代码定义了一个简单的二叉树节点类 `TreeNode` 和一个名为 `SwapTreeNodes` 的方法,该方法接受二叉树的根节点作为参数。如果节点不为空,就执行交换并继续递归地对左子树和右子树进行同样的操作。
阅读全文