題目:請完成一個函數,輸入一顆二叉樹,該函數輸出它的鏡像。二叉樹節點定義如下:
class BinaryTreeNode{
double value;
BinaryTreeNode left;
BinaryTreeNode right;
public BinaryTreeNode(int value){
this.value = value;
}
}
思路:前序遍歷二叉樹,如果有子節點,則交換
解決方案:
public class Question27 {
static class BinaryTreeNode{
double value;
BinaryTreeNode left;
BinaryTreeNode right;
public BinaryTreeNode(int value){
this.value = value;
}
}
public static void mirrorRecursively(BinaryTreeNode node){
if (node == null) return;
if (node.left == null && node.right == null) return;
BinaryTreeNode tmp = node.left;
node.left = node.right;
node.right = tmp;
if (node.left != null){
mirrorRecursively(node.left);
}
if (node.right != null){
mirrorRecursively(node.right);
}
}
public static void main(String[] args) {
BinaryTreeNode pHead = new BinaryTreeNode(1);
BinaryTreeNode pAhead = new BinaryTreeNode(3);
BinaryTreeNode pBhead = new BinaryTreeNode(5);
BinaryTreeNode pChead = new BinaryTreeNode(7);
pHead.left = pAhead;
pHead.right = pBhead;
pBhead.left = pChead;
mirrorRecursively(pHead);
System.out.println(pHead.left.value);
}
}