在中序遍历中调整:
static struct TreeNode* q=NULL;
void order(struct TreeNode* p){
if(p->left)
order(p->left);
p->left=q;
if(q)
q->right=p;
q=p;
if(p->right)
order(p->right);
}
struct TreeNode* Convert(struct TreeNode* pRootOfTree ) {
// write code here
if(!pRootOfTree)
return NULL;
order(pRootOfTree);
while(pRootOfTree->left)
pRootOfTree=pRootOfTree->left;
return pRootOfTree;
}
存储中序遍历结点再连接:
class Solution {
public:
vector<TreeNode*> tree;
vector<TreeNode*> order(TreeNode* p){
if(p->left)
order(p->left);
tree.push_back(p);
if(p->right)
order(p->right);
return tree;
}
TreeNode* Convert(TreeNode* pRootOfTree) {
if(!pRootOfTree)
return NULL;
order(pRootOfTree);
for(int i=0;i<tree.size()-1;i++){
tree[i]->right=tree[i+1];
tree[i+1]->left=tree[i];
}
return tree[0];
}
};

京公网安备 11010502036488号