当前位置: 代码迷 >> 综合 >> 第三章 二叉树问题(找到搜索二叉树中的两个错误节点)
  详细解决方案

第三章 二叉树问题(找到搜索二叉树中的两个错误节点)

热度:77   发布时间:2023-10-11 12:10:23.0

【题目】

        一颗二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这个二叉树不再是搜索二叉树,请找到这两个错误节点并返回。

package zyc.binaryTree;import java.util.Stack;public class P137_getTwoErrorNode {public static Node[] getTwoErrorNode(Node node) {Node[] errors = new Node[2];if (node == null) {return errors;}// 搜索二叉树采用 中序遍历Node pre = null;Stack<Node> nodeStack = new Stack<>();while (node != null || !nodeStack.isEmpty()) {if (node != null) {nodeStack.add(node);node = node.left;} else {Node cur = nodeStack.pop();if (pre != null && pre.value > cur.value) {// 第一个错误节点是 首次降序的较大节点errors[0] = errors[0] == null ? pre : errors[0];// 第二个错误节点是 最后一次降序的较小节点errors[1] = cur;}pre = cur;node = cur.right;}}return errors;}public static class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;}}
}

        

  相关解决方案