• 定义TreeNode数组,存入中序遍历结果;
  • 建立双向链表关系,返回链表头结点。
/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void minOrder(TreeNode* node, vector<TreeNode*>& result) {
        if (node == NULL) return;
        if (node->left) minOrder(node->left, result);
        result.push_back(node);
        if (node->right) minOrder(node->right, result);
    }
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (pRootOfTree == NULL) return pRootOfTree;
        vector<TreeNode*> result;
        minOrder(pRootOfTree, result);
        for (int i = 0; i < result.size() - 1; i++) {
            result[i]->right = result[i + 1];
            result[i + 1]->left = result[i];
        }
        return result[0];
    }
};