思路
使用一个额外指针,控制指向,树的遍历使用中序,保证有序
ac代码
//左前驱,右后继
TreeNode* temp = nullptr, *root = nullptr;
void helper(TreeNode* rt){
if(!rt) return;
helper(rt->left);
if(temp == nullptr){
temp = rt;
root = rt;
}else{
temp->right = rt;
rt->left = temp;
temp = rt;
}
helper(rt->right);
}
TreeNode* Convert(TreeNode* pRootOfTree) {
helper(pRootOfTree);
return root;
}
使用两个指针变量root和temp
的原因是,如果使用一个,在处理完后,该指针是指向最后一个节点的,最大值的那个位置,直接返回的话,从右向左正确,从左向右只有一个值。所以额外再使用一个变量,保存最初开始的第一个节点的位置,将其最后返回即可!