剑指Offer - 二叉搜索树与双向链表(C++)

it2022-05-05  132

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

 

思路:中序遍历,并用一个指向当前节点的上一个节点和当前节点的指向相互指向。

 

C++

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* Convert(TreeNode* pRootOfTree) { if(pRootOfTree == nullptr) return nullptr; TreeNode* pre = nullptr; convertHelper(pRootOfTree, pre); TreeNode* res = pRootOfTree; while(res ->left) //找双双向链表的首节点 res = res ->left; return res; } void convertHelper(TreeNode* cur, TreeNode*& pre) //中序遍历 { if(cur == nullptr) return; convertHelper(cur ->left, pre); cur ->left = pre; //当前节点的左指针 指向前面的pre节点 if(pre) pre ->right = cur; // pre节点的右指针指向后面的cur节点 pre = cur; // pre 后移 convertHelper(cur ->right, pre); } };

 


最新回复(0)