[剑指 제공] JT26 --- 바이너리 검색 트리 및 이중 연결 목록 (며칠 숙고 한 후 꽤 추상적 인 질문입니다)

주제는 다음과 같습니다

이진 검색 트리를 입력하고 이진 검색 트리를 정렬 된 이중 연결 목록으로 변환합니다. 새로운 노드를 생성 할 수없고 트리에서 노드 포인터의 포인트 만 조정할 수 있어야합니다.
간단한 질문이지만 너무나도 아팠습니다!

아이디어와 코드는 다음과 같습니다.

이제 내 개인적인 이해는 상대적으로 피상적이며 중간 순서 순회
입니다. 재귀 적 구조를 분석 한 후 업데이트하겠습니다.
결국이 질문은 며칠 동안 갇혀 있었으므로 먼저 작성하십시오.

/*
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);
    }
};

여기에 사진 설명 삽입

추천

출처blog.csdn.net/qq_42136832/article/details/114794645