题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
中序遍历原二叉树,
使用两个私有变量分别存储排序后的头指针re和当前操作结点的前一个指针preNode,由于中序遍历,第一个操作的为最小的数,因此preNode初始化为NULL(重点!不初始化会导致串不确定延长)
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { private: TreeNode* preNode = NULL; TreeNode* re = NULL; public: TreeNode* Convert(TreeNode* pRootOfTree) { ConvertSub(pRootOfTree); return re; } void ConvertSub(TreeNode* currentNode) { if (currentNode == NULL) return; ConvertSub(currentNode->left); if (preNode == NULL) { // 不初始化preNode的话preNode有可能不为空,这里就有可能判断失误 re = currentNode; } else { currentNode->left = preNode; preNode->right = currentNode; } preNode = currentNode; ConvertSub(currentNode->right); } };