검 지 Offer 27. 이 진 트 리 의 거울

함 수 를 완성 하고 이 진 트 리 를 입력 하 십시오. 이 함 수 는 미 러 를 출력 합 니 다.예 를 들 어 입력:
 4

/ 27 / \ / 1 3 6 9 미 러 출력:
 4

/ 7 2 / \ / 9 6 3 1
   1:
  :root = [4,2,7,1,3,6,9][4,7,2,9,6,3,1]0 <=      <= 1000

이 문 제 는 사실 어렵 지 않 습 니 다. 조금 보고 생각 이 났 습 니 다. 보면 어렵 지 않 습 니 다. 처음에 도 이 진 트 리 의 문제 에 놀 랐 습 니 다. 자세히 생각해 보면 그의 거울 을 구 하 는 것 은 그의 left 노드 와 right 노드 를 매번 교환 하면 되 는 것 이 아 닙 니까? 이것 을 깨 닫 고 코드 를 쓰기 시 작 했 습 니 다. 제 가 여기 서 먼저 생각 한 것 은 재 귀 하 는 방법 입 니 다.매번 들 어 오 는 노드 는 루트 노드 로 볼 수 있 기 때문에 하 는 작업 은 매번 left 와 right 를 교환 할 때 주의해 야 할 일 을 재 귀적 으로 끝 내 는 조건 입 니 다. 그의 left 와 right 가 모두 비어 있 을 때 루트 로 돌아 가면 됩 니 다. 만약 에 루트 노드 가 비어 있다 고 판단 하면 null 로 돌아 가면 됩 니 다. 왜 그런 지 잘 생각해 보 세 요.생각 이 통 하 겠 죠. 마지막 에 이런 방법 은 문 제 를 보지 않 고 생각해 낸 것 입 니 다. 지나 고 나 서 문 제 를 풀 고 보조 스 택 으로 하 는 방법 도 있 습 니 다. 전에 들 어 본 적 이 있 습 니 다. 재 귀적 으로 해결 할 수 있 는 것 은 모두 스 택 을 지 키 는 것 으로 해결 할 수 있 습 니 다. 저 는 재 귀적 인 방법 을 썼 습 니 다. 느낌 도 정상 적 인 방법 인 것 같 습 니 다. 코드 를 붙 입 니 다.
class TreeNode {
    public $val = null;
    public $left = null;
    public $right = null;
    function __construct($value) { $this->val = $value; }
}
 
class Solution {

    /**
     * @param TreeNode $root
     * @return TreeNode
     */
    function mirrorTree($root) {
        if ($root->left == null && $root->right == null) {
            return $root;
        }
        $temp = $root->left;
        $root->left = $root->right;
        $root->right = $temp;
        $this->mirrorTree($root->left);
        $this->mirrorTree($root->right);
        return $root;
    }
}

좋은 웹페이지 즐겨찾기