牛客题目链接
1. 题目考点
- 中序遍历搜索二叉树是一个升序序列
- 容易错误理解为相邻的两个节点(题目中并没有规定)
2. 考点解析
- 获取中序遍历序列,其中有两个元素位置错位,需要找出这两个元素,一定是大的在前,小的在后
ArrayList<Integer> arr = new ArrayList<>();
int[] res = new int[2];
public int[] findError (TreeNode root) {
if (root == null) return res;
dfs(root);
find(arr);
return res;
}
public void dfs(TreeNode root) {
if (root == null) return ;
dfs(root.left);
arr.add(root.val);
dfs(root.right);
}
public void find(ArrayList<Integer> arr) {
int p = 0;
for (int i = 0; i < arr.size() - 1; i++) {
if (arr.get(i) > arr.get(i+1)) {
res[1] = arr.get(i);
p = i;
break;
}
}
for (int j = arr.size() - 1; j > p; j--) {
if (arr.get(j) < arr.get(j-1)) {
res[0] = arr.get(j);
return ;
}
}
}
3. 参考链接
- 牛客题目解析