【101-Symmetric Tree(對稱樹)】
阿新 • • 發佈:2019-02-03
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
For example, this binary tree is symmetric:
<code class="hljs tex has-numbering"> 1 / <span class="hljs-command">\ </span> 2 2 / <span class="hljs-command">\ </span>/ <span class="hljs-command">\ </span>3 4 4 3</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
But the following is not:
<code class="hljs tex has-numbering"> 1 / <span class="hljs-command">\ </span> 2 2 <span class="hljs-command">\ </span> <span class="hljs-command">\ </span> 3 3</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
Note:
Bonus points if you could solve it both recursively and iteratively.
題目大意
給定一棵樹,判斷它是否是對稱的。即樹的左子樹是否是其右子樹的映象。
解題思路
使用遞迴進行求解,先判斷左右子結點是否相等,不等就返回false,相等就將左子結點的左子樹與右子結果的右子結點進行比較操作,同時將左子結點的左子樹與右子結點的左子樹進行比較,只有兩個同時為真是才返回true,否則返回false。
程式碼實現
樹結點類
<code class="hljs cs has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> TreeNode { <span class="hljs-keyword">int</span> val; TreeNode left; TreeNode right; TreeNode(<span class="hljs-keyword">int</span> x) { val = x; } }</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
演算法實現類
<code class="hljs vbscript has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> Solution { <span class="hljs-keyword">public</span> boolean isSymmetric(TreeNode root) { <span class="hljs-keyword">if</span> (root == <span class="hljs-literal">null</span>) { return <span class="hljs-literal">true</span>; } <span class="hljs-keyword">else</span> { return isSame(root.<span class="hljs-built_in">left</span>, root.<span class="hljs-built_in">right</span>); } } <span class="hljs-keyword">private</span> boolean isSame(TreeNode <span class="hljs-built_in">left</span>, TreeNode <span class="hljs-built_in">right</span>) { <span class="hljs-keyword">if</span> (<span class="hljs-built_in">left</span> == <span class="hljs-literal">null</span> && <span class="hljs-built_in">right</span> == <span class="hljs-literal">null</span>) { return <span class="hljs-literal">true</span>; } <span class="hljs-keyword">if</span> (<span class="hljs-built_in">left</span> != <span class="hljs-literal">null</span> && <span class="hljs-built_in">right</span> == <span class="hljs-literal">null</span> || <span class="hljs-built_in">left</span> == <span class="hljs-literal">null</span> && <span class="hljs-built_in">right</span> != <span class="hljs-literal">null</span>){ return <span class="hljs-literal">false</span>; } <span class="hljs-keyword">else</span> { return <span class="hljs-built_in">left</span>.val == <span class="hljs-built_in">right</span>.val && isSame(<span class="hljs-built_in">left</span>.<span class="hljs-built_in">left</span>, <span class="hljs-built_in">right</span>.<span class="hljs-built_in">right</span>) && isSame(<span class="hljs-built_in">left</span>.<span class="hljs-built_in">right</span>, <span class="hljs-built_in">right</span>.<span class="hljs-built_in">left</span>); } } }</code>