二叉树删除子树PTA
时间: 2024-12-30 10:20:29 浏览: 11
### 关于二叉树删除子树的操作
对于给定的二叉树执行多次删除子树操作并输出每次删除后的中序遍历序列,可以按照如下方法处理:
#### 定义二叉树节点结构
为了方便描述和实现算法,定义二叉树节点的数据结构如下:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int x) {
this.val = x;
}
}
```
#### 实现删除指定子树的功能
创建函数 `deleteSubTree` 来移除特定值作为根节点的子树,并返回更新后的树。此过程涉及递归地检查当前节点及其左右孩子是否为目标子树的一部分。
```java
public static TreeNode deleteSubTree(TreeNode root, int targetVal) {
if (root == null) return null;
// 递归调用左子树
root.left = deleteSubTree(root.left, targetVal);
// 递归调用右子树
root.right = deleteSubTree(root.right, targetVal);
// 如果当前节点是要被删掉的目标,则将其置为空
if (root.val == targetVal) {
return null;
}
return root;
}
```
#### 获取中序遍历序列
每当完成一次删除之后,都需要获取新的二叉树的中序遍历结果以便打印出来查看变化情况。
```java
public static List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty() || root != null) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
result.add(root.val);
root = root.right;
}
return result;
}
```
通过上述两个辅助函数的帮助,在主逻辑里就可以轻松实现连续性的删除动作以及展示每一步的结果了[^1]。
阅读全文