99 恢复二叉树

发布时间:2024年01月04日

问题描述:给你二叉搜索树的根节点root,概述中的两个节点的值被错误的交换,请在不改变其结构的情况下,恢复这棵树。

问题描述:二叉搜索树的定义是:若它的左子树不空,则左子树上所有节点的值均小于他的根节点的值;若他的右子树不空,则右子树上所有节点的值均大于他的根结点的值,他的左、右子树也分别是二叉搜索树。二叉搜索树的中序遍历是·有序的,如果出现了逆序,那么其中有一个节点肯定是错误了,我们只需要找出这两个错误的节点,最后再交换他们的节点即可,第一个错误的点肯定是大于前面的值,第二个错误的点是小于前面的值。例如123456,错序之后为126453,当遍历到4的时候由于是第一次访问到异常元素(也就是后面遍历的比之前遍历的要小,此时第一个错点应该是6),再次访问时,到3,发现其比5小,属于第二个点

TreeNode pre=null;
TreeNode first=null;
TreeNode second=null;
public void findWrongNode(TreeNode root)
{
if(root==null){return;}
findWrongNode(root.left);
if(first==null&&pre.val>root.val&&pre!=null)
{
first=pre;
}
if(first!=null&&pre!=null&&pre.val>root.val)
{
second=root;
}
pre=root;
findWrongNode(root.right);
}
public TreeNode restoreTree(TreeNode root)
{
findWrongNode(root);
int value=first.val;
first.val=second.val;
second.val=value;
???????return root;
}

文章来源:https://blog.csdn.net/qq_52299902/article/details/135392491
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。