๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œ

[์ž๋ฐ”] Leetcode 100 - Same Tree

by applemango2021 2021. 2. 28.

์–ด์ฉŒ๋‹ค ๋ฉด์ ‘์ด ์žกํ˜€์„œ ๋ฐœ๋“ฑ์— ๋ถˆ๋–จ์–ด์ง„ ๋Š๋‚Œ์œผ๋กœ ๋ถ€๋žด๋ถ€๋žด ๋ฌธ์ œ ํ‘ธ๋Š”์ค‘ ใ…Ž

์นœ๊ตฌํ•œํ…Œ ๋ฆฌํŠธ์ฝ”๋“œ ์ถ”์ฒœ ๋ฐ›์•„์„œ Difficulty Easy๋‹จ๊ณ„๋ถ€ํ„ฐ ํ’€๊ณ  ์žˆ๋Š”๋ฐ, ์–ด๋ ต์ง€๋Š” ์•Š๋‹ค. ํ•˜์ง€๋งŒ ์ตœ์ ํ™”๋Š” ์ •๋ง ๋์ด ์—†๊ณ , ๋˜‘๋˜‘ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ด ์„ธ์ƒ์— ๋งŽ๋‹ค๋Š” ๊ฑธ ๊ณ„์†ํ•ด์„œ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค. 


TreeNode 2๊ฐœ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋˜์ ธ์ฃผ๋ฉด ๊ทธ 2๊ฐœ์˜ TreeNode๋“ค์ด ๋™์ผํ•œ์ง€ ์•„๋‹ˆ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์งœ๋Š” ๋ฌธ์ œ๋‹ค. 

Class TreeNode๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ๋ฉ”์†Œ๋“œ ๋กœ์ง๋งŒ ์ฑ„์šฐ๋ฉด ๋œ๋‹ค.

 public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode() {}
      TreeNode(int val) { this.val = val; }
      TreeNode(int val, TreeNode left, TreeNode right) {
          this.val = val;
          this.left = left;
          this.right = right;
      }
  }

๋‚ด ์ƒ๊ฐ์˜ ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

1. ์ผ๋‹จ ํ˜„์žฌ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด๋ฌธ์€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค. 

- ํ˜„์žฌ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๊ฐ™๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ƒ๊ฐํ•˜๊ณ , ๋งŒ์•ฝ ๋‹ค๋ฅด๋‹ค๋ฉด ์ดํ›„๋ฅผ ๊ณ ๋ฏผํ•  ํ•„์š”๋„ ์—†์ด false๋‹ค. 

 public boolean isSameTree(TreeNode p, TreeNode q) {      
        if(p.val==q.val) 
            return (์•„์ง ์ƒ๊ฐ์ค‘์ธ ๋กœ์ง)
        
         else return false;
    }

 

2. ํ˜„์žฌ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ž์‹๋“ค์„ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ ๋…ธ๋“œ์—๋Š” ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ์žˆ๋Š”๋ฐ, 

๊ทธ ์ž์‹๋“ค์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋กœ์ง์€ 1๋ฒˆ์ด๋ž‘ ์‚ฌ์‹ค์ƒ ๋™์ผํ•˜๋‹ค. → ๊ทธ๋ ‡๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ์ƒ๊ฐํ•ด์•ผ๊ฒ ๊ตฐ! 

๊ทผ๋ฐ ์ž์‹๋“ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๋ฉด ์ด๊ฒƒ๋„ ๊ฒฐ๊ตญ false๋‹ค. → ๊ทธ๋ ‡๋‹ค๋ฉด &&๋กœ ๋ฌถ์–ด์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ false๋งŒ false๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค! 

 public boolean isSameTree(TreeNode p, TreeNode q) {      
        if(p.val==q.val) 
            return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
        
         else return false;
    }

 

3. ์žฌ๊ท€๋กœ ๊ณ„์†ํ•ด์„œ ๊ฐ’๋“ค์„ ๋น„๊ตํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ๋„๋‹ฌํ•ด์„œ ์ž์‹์ด ์—†์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ๋น„๊ต๋Œ€์ƒ์ธ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ null์ธ ๊ฒฝ์šฐ์™€ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ null์ธ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

- ๋งŒ์•ฝ ๋‘˜ ๋‹ค null์ธ ๊ฒฝ์šฐ, ์ด๊ฑด ๊ทธ๋ƒฅ ๋๊นŒ์ง€ ์˜ฌ ๋•Œ๊นŒ์ง€ ์–‘์ชฝ TreeNode๊ฐ€ ๋™์ผํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ˆ๊นŒ true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค 

- ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ null์ธ ๊ฒฝ์šฐ, ์ด๊ฑด ๋ชจ์–‘์ƒˆ ์ž์ฒด๊ฐ€ ๋‘ ๊ฐœ์˜ TreeNode๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๋œป์ด๋‹ˆ๊นŒ false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค  

 public boolean isSameTree(TreeNode p, TreeNode q) {      
        if(p==null && q==null) return true;
        else if(p==null || q==null) return false;
        
        if(p.val==q.val) 
            return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
        
         else return false;
    }

์ฝ”๋“œ์˜ ์ „๋ถ€๋‹ค! ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€์–ด์„œ ํ–‰๋ณตํ•˜๋‹ค!