99. 恢复二叉搜索树(JAVA实现)
二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public void recoverTree(TreeNode root) {
//存储中序遍历的节点
List<TreeNode> posOrdered = new ArrayList<>();
TreeNode tmp = root;
//利用栈进行中序遍历
Stack<TreeNode> s = new Stack<>();
while (tmp != null || !s.empty()) {
while (tmp != null) {
s.push(tmp);
tmp = tmp.left;
}
tmp = s.pop();
posOrdered.add(tmp);
//对节点的val进行排序
for (int i = posOrdered.size() - 1; i > 0; i--) {
int a = posOrdered.get(i).val;
int b = posOrdered.get(i - 1).val;
if (a >= b) break;
posOrdered.get(i).val = b;
posOrdered.get(i - 1).val = a;
}
tmp = tmp.right;
}
}
}

本文介绍了一种在不改变二叉搜索树结构的情况下,通过中序遍历和节点值排序来恢复被错误交换节点的方法。使用JAVA实现,适用于数据结构与算法的学习与实践。
&spm=1001.2101.3001.5002&articleId=105622074&d=1&t=3&u=488ac91c699b4b109fee149315e0acf9)
388

被折叠的 条评论
为什么被折叠?



