程序员代码面试指南刷题--第三章.找到搜索二叉树中两个错误的节点

题目描述
一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请按升序输出这两个错误节点的值。(每个节点的值各不相同)

输入描述:

第一行输入两个整数 n 和 root,n 表示二叉树的总节点个数,root 表示二叉树的根节点。

以下 n 行每行三个整数 fa,lch,rch,表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理)

ps:节点的编号就是该节点的值。

输出描述:

请按升序输出这两个错误节点的值。

示例1

输入

3 1
1 2 3
2 0 0
3 0 0

输出

1 2

解法一:中序遍历查找

import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        br.readLine();
        TreeNode root = createTree(br);
        preOrder(root);
    }
    public static void preOrder(TreeNode root){
        if(root==null) return ;
        TreeNode[] res = new TreeNode[2];
        TreeNode pre = null;
        TreeNode p = root;
        Stack<TreeNode> s = new Stack<>();
        while(p!=null||!s.isEmpty()){
            while(p!=null){
                s.push(p);
                p = p.left;
            }
            p = s.pop();
            if(pre!=null&&pre.val>p.val){
                res[0] = res[0]==null?pre:res[0];
                res[1] = p;
            }
            pre = p;
            p = p.right;
        }
        System.out.println(res[1].val+" "+res[0].val);
    }
    
    //递归建树
    public static TreeNode createTree(BufferedReader br){
        try{
            String[] ss = br.readLine().trim().split(" ");
            int data = Integer.parseInt(ss[0]);
            int left = Integer.parseInt(ss[1]);
            int right = Integer.parseInt(ss[2]);
            TreeNode root = new TreeNode(data);
            if(left!=0){
                root.left = createTree(br);
            }
            if(right!=0){
                root.right = createTree(br);
            }
            return root;
        }catch(Exception e){
            return null;
        }
    }


}
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    public TreeNode(int val){
        this.val = val;
    }
}


发布了189 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44406146/article/details/105527166