1. 程式人生 > >二叉搜索樹與雙向鏈表

二叉搜索樹與雙向鏈表

help null public ret for i++ pre treenode helper

我的代碼:

 1 class Solution {
 2     vector<TreeNode*> vec;
 3     void OrderTrace(TreeNode* pRoot)
 4     {
 5         if(!pRoot) return;
 6         OrderTrace(pRoot->left);
 7         vec.push_back(pRoot);
 8         OrderTrace(pRoot->right);
 9     }
10 public:
11     TreeNode* Convert(TreeNode* pRootOfTree)
12 { 13 if(!pRootOfTree) 14 return NULL; 15 OrderTrace(pRootOfTree); 16 int length = vec.size(); 17 vec[0]->left = NULL; 18 for(int i = 0; i < length-1; i++) 19 { 20 vec[i]->right = vec[i+1]; 21 vec[i+1]->left = vec[i];
22 } 23 vec[length - 1]->right = NULL; 24 return vec[0]; 25 } 26 };

示例代碼:

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; if(pre) pre ->right = cur; pre = cur; convertHelper(cur ->right, pre); } };

二叉搜索樹與雙向鏈表