題目面試
請完成一個函數,輸入一棵二叉樹,請函數輸出它的鏡像。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
測試用例