題目:操作給定的二叉樹,將其變換為源二叉樹的映象。
輸入描述:
思路:首先要理解業務邏輯,何為映象?所謂映象就是對於任何乙個結點,將其左右子樹進行交換即可。對於一棵以root為根結點的二叉樹,要將其映象,首先將其左右子樹(root.left為根的子樹)和(root.right為根的子樹)進行映象,然後將root.left和root.right這2棵子樹進行交換即可。顯然要處理root結點子樹需要先處理其左右結點子樹問題,因此顯然是對後序遞迴遍歷進行改造即可。設計乙個遞迴函式輸入根結點root,將其映象後返回新樹的根結點:
遞推關係:
treenodelefttree=this.process(root.left);
treenoderighttree=this.process(root.right);
root.left=righttree;
root.right=lefttree;
returnroot;
邊界條件:
if(root==null)return null;
題目邏輯很簡單,遞迴操作也很簡單,只要返回乙個資訊即可。
注意:題目中並不要求返回新的映象樹的根結點,可能oj將root設定為了乙個後台全域性或者成員變數,可以自動接收到改變後的root,因此這裡不需要返回,直接為root賦上新的值即可。但是在遞迴方法中顯然每次都需要返回乙個跟結點,否則無法實現功能。
//輸入根結點子樹,求出其映象的二叉樹,返回根結點
public class solution
//設計乙個遞迴函式process,用來求一棵二叉樹的映象樹的根結點
private treenode process(treenode root)
}
二叉樹的深度,平衡二叉樹,二叉樹的映象
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。實現,遞迴遍歷二叉樹的左子樹,右子樹,取子樹深度大值,再加上子樹與根節點的距離1,即為這顆二叉樹的深度 classsolution 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。平...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
二叉樹應用 二叉樹映象(對稱)
題目 完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。如 分析 對於乙個二叉樹的映象過程,我們可以先前序遍歷這棵樹的每乙個節點,如果遍歷到的節點有子節點,就交換它的兩個子節點。當交換完所有的飛葉子節點之後,就得到了樹的映象。具體實現 struct treenode void mirrorrecur...