剑指offer:二叉搜索树与双向链表
二叉搜索树是一种特殊的二叉树,它的每个节点值大于它的左子节点,小于它右子节点;我们只要对它中序遍历就可以得到递增双向链表。先定义个头指针pRootOfTree,遍历这个结点的所有左子树,找到最小的那个,当指向当前遍历的前一节点pre为空时,把遍历到的最小左子树节点赋给pre和head指针,当pre不为空时,把根节点pRootOfTree给前一节点pre的右子节点(还是在整个左子树中),在把pre指向右子节点的左子树,都遍历完,最后把更新pre;然后进入到右子树,按左子树的方式处理,最后返回head!!!
#include <cstddef>
class Solution {
public:
TreeNode* head = nullptr;
TreeNode* pre = nullptr;
TreeNode* Convert(TreeNode* pRootOfTree) {
if (pRootOfTree == nullptr) return nullptr;
Convert(pRootOfTree -> left);
if(pre == nullptr) {
pre = pRootOfTree;
head = pRootOfTree;
}
else{
pre->right = pRootOfTree;
pRootOfTree->left = pre;
pre = pRootOfTree;
}
Convert(pRootOfTree->right);
return head;
}
};
#剑指offer##23届找工作求助阵地#
