剑指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届找工作求助阵地#