什么是网站的原型,有哪些网站可以做电子邀请函,工信部网站 备案,自己做外贸网站给你一棵二叉搜索树#xff0c;请你 按中序遍历 将其重新排列为一棵递增顺序搜索树#xff0c;使树中最左边的节点成为树的根节点#xff0c;并且每个节点没有左子节点#xff0c;只有一个右子节点。
示例 1#xff1a;
输入#xff1a;root [5,3,6,2,4,null,8,1,null…给你一棵二叉搜索树请你 按中序遍历 将其重新排列为一棵递增顺序搜索树使树中最左边的节点成为树的根节点并且每个节点没有左子节点只有一个右子节点。
示例 1
输入root [5,3,6,2,4,null,8,1,null,null,null,7,9] 输出[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 示例 2
输入root [5,1,7] 输出[1,null,5,null,7] 提示
树中节点数的取值范围是 [1, 100] 0 Node.val 1000
解题思路
二叉搜索树中序遍历的次序就是由小到大的因此我们在中序遍历的过程中可以新建一个头节点然后按中序遍历的顺序将题目中给出的二叉树节点一个一个地连在新树上面。在中序遍历的时候修改节点指向就可以实现。具体地当我们遍历到一个节点时把它的左孩子设为空并将其本身作为上一个遍历到的节点的右孩子。这里需要有一些想象能力。递归遍历的过程中由于递归函数的调用栈保存了节点的引用。
下面的代码中使用了 dummy 节点它一般在链表题中出现。在链表题目中我们为了防止链表的头结点发生变化之后不好维护头结点我们设置 dummy 从而保证头结点不变。这个题目中设置了 dummy 从而保证了在新的树中dummy 是根节点不需要在递归的时候选择根节点最终返回的时候要返回的是 dummy.right。
代码
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/var t new(TreeNode)
func increasingBST(root *TreeNode) *TreeNode {res:tfindIncreasingBST(root)return res.Right
}
func findIncreasingBST(root *TreeNode) {if root.Left!nil{findIncreasingBST(root.Left)}root.Leftnilt.Rightroottt.Rightif root.Right!nil{findIncreasingBST(root.Right)}}