牛客BM30。
描述:
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=295&tqId=23253&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj
分析:
二叉搜索树的中序遍历是递增序列。可以利用中序遍历完成。
同时不能新增节点,只能改变指针方向,left代表左,right代表右。
中序遍历时,会一次遍历从小到大的节点,此时记录前一个节点pre和当前节点cur,将:
pre.right = cur;
cur.left = pre;
pre = cur;
链接后的示意图(参考网图):
代码:
public class Solution {
TreeNode pre = null;
TreeNode head = null;
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null) return pRootOfTree;
TreeNode cur = pRootOfTree;
//首先递归到最左最小值
Convert(pRootOfTree.left);
if (pre == null) {
//找到最小值,初始化head与pre
pre = cur;
head = cur;
} else {
//当前节点与上一节点建立连接,将pre设置为当前值
pre.right = cur;
cur.left = pre;
pre = cur;
}
Convert(pRootOfTree.right);
return head;
}
}