제안의 26 번째 질문
주제는 다음과 같습니다
이진 검색 트리를 입력하고 이진 검색 트리를 정렬 된 이중 연결 목록으로 변환합니다. 새로운 노드를 생성 할 수없고 트리에서 노드 포인터의 포인트 만 조정할 수 있어야합니다.
간단한 질문이지만 너무나도 아팠습니다!
아이디어와 코드는 다음과 같습니다.
이제 내 개인적인 이해는 상대적으로 피상적이며 중간 순서 순회
입니다. 재귀 적 구조를 분석 한 후 업데이트하겠습니다.
결국이 질문은 며칠 동안 갇혀 있었으므로 먼저 작성하십시오.
/*
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;
if(pre) pre ->right = cur;
pre = cur;
convertHelper(cur ->right, pre);
}
};