動畫:面試必刷之二叉樹的鏡像

動畫:面試必刷之二叉樹的鏡像

題目面試

請完成一個函數,輸入一棵二叉樹,請函數輸出它的鏡像。ide

以下所示:函數

動畫:面試必刷之二叉樹的鏡像

問題分析測試

根據題目的要求,求出一個二叉樹的鏡像。首先咱們要知道什麼是二叉樹的鏡像,咱們經過上圖能夠得出,鏡像就是二叉樹的每層節點的左右子樹進行相互交換。說白了就是除了根節點外,全部的結點中的左子節點的鏡像是右子節點,右子節點的鏡像變成了左子節點。動畫

基本的問題咱們弄明白了,下一步咱們屢屢思路,開始動手實現二叉樹的鏡像。code

由於每一個具備非空節點的節點的左右子節點都要進行交換,因此咱們能夠用遞歸來解決。具體思路分析,咱們看下方的解決思路。blog

動畫實現遞歸

動畫:面試必刷之二叉樹的鏡像

解決思路ip

首先,咱們使用遞歸要找到遞歸的終止條件,不能一直往下遞歸呀,當咱們遇到葉子節點的時候,咱們就不用進行遞歸交換了。因此遞歸條件就是當前遞歸的節點是否爲空。it

1  if(root == null){
2         return;  
3    }

而後咱們聲明一個臨時變量用來存儲兩個節點交換的值,而後進行左右子樹交換。

1// 進行結點交換
2    Let tempNode = root.left;
3    root.left = root.right;
4    root.right = tempNode;

交換以後,咱們直接遞歸剩下的節點進行交換就 OK。而後返回遞歸後的樹的根節點。

1// 遞歸遍歷剩餘的子節點
2    insert(root.left);
3    insert(root.right);
4
5    // 返回根節點
6    return root;

代碼實現

JavaScript

動畫:面試必刷之二叉樹的鏡像
Java
動畫:面試必刷之二叉樹的鏡像

Python

動畫:面試必刷之二叉樹的鏡像

測試用例

  • 普通二叉樹 —— 普通測試
  • 只有左子節點、只有右子節點、只有一個結點 —— 特殊測試
  • 空樹 —— 輸入測試
相關文章
相關標籤/搜索