leetcode 문제집 894-가능한 모든 두 갈래 나무

1359 단어 leetcode

894- 가능한 모든 두 갈래 나무


사고방식: 이 문제는 두 갈래 나무의 모든 가능성을 요구하고 귀속을 채택하는 것이 비교적 간단하다.귀속 프로세스: 뿌리 노드가 하나의 노드를 차지하고 그 다음에 좌우 트리의 가능성을 고려한다.먼저 두 갈래 나무의 성질에 따라 귀속 중단의 조건을 확정한다. 짝수 노드가 될 수 없다.노드 수가 1이면 루트만 있습니다.다시 돌아갈 필요 없어.좌우자수의 가능성은 귀속을 통해 구할 수 있으며, 마지막으로 좌우자수와 뿌리 노드를 조합하는 것이다.최적화: 앞의 각종 노드의 결과를 저장하고 후속적으로 서로 다른 반복 귀속 계산을 한다.
	// 
    // : n 
    vector allPossibleFBT(int N) {
        // 
        // 
        vector res;
        if(N & 1 == 0) 
        {
            // 
            return res;
        }
        if(N == 1)
        {
            // 
            res.push_back(new TreeNode(0));
            return res;
        }

        // 
        // , 1,3,5......N-2  , 2 
        for(int i = 1; i < N-1; i+=2)
        {
            vector left = allPossibleFBT(i);
            vector right = allPossibleFBT(N-1-i);

            // 
            for(int m = 0; m < left.size(); ++m)
            {
                for(int n = 0; n < right.size(); ++n)
                {
                    TreeNode*root = new TreeNode(0);
                    root->left = left[m];
                    root->right = right[n];

                    res.push_back(root);
                }
            }
        }
        
        return res;
    }

좋은 웹페이지 즐겨찾기