(검지 Offer) 면접 문제 19: 두 갈래 나무의 거울

1875 단어 면접 문제

제목:


주어진 두 갈래 트리를 조작하여 원본 두 갈래 트리의 거울로 변환합니다. 
두 갈래 나무의 정의는 다음과 같다.
struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
};

설명 입력:
 :  
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11
    	 
            8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9  7  5

생각:


위의 두 갈래 나무를 관찰하면 아래에서 한 그루의 나무의 거울을 구하는 과정을 쉽게 얻을 수 있다.
먼저 이 나무의 모든 결점을 두루 훑어보고, 만약 두루 훑어보는 결점에 자결점이 있다면, 그 두 개의 자결점을 교환한다.모든 비잎결점의 좌우 결점을 교환한 후 나무의 거울을 얻었다.

코드:

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
};

void Mirror(TreeNode *pRoot){
    if(pRoot==NULL)
        return;
    if(pRoot->left==NULL && pRoot->right==NULL)
        return;
    TreeNode* tmp=pRoot->left;
    pRoot->left=pRoot->right;
    pRoot->right=tmp;

    if(pRoot->left)
        Mirror(pRoot->left);
    if(pRoot->right)
        Mirror(pRoot->right);
}

온라인 테스트 OJ:


http://www.nowcoder.com/books/coding-interviews/564f4c26aa584921bc75623e48ca3011?rp=1
AC 코드:
class Solution {
public:
    void Mirror(TreeNode *pRoot){
		if(pRoot==NULL)
            return;
        if(pRoot->left==NULL && pRoot->right==NULL)
            return;
        TreeNode* tmp=pRoot->left;
        pRoot->left=pRoot->right;
        pRoot->right=tmp;
        
        if(pRoot->left)
            Mirror(pRoot->left);
        if(pRoot->right)
            Mirror(pRoot->right);
    }
};

좋은 웹페이지 즐겨찾기