面試題 19: 數的鏡像

一. 題目

請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像.

代碼請到我的代碼庫中下載 Point2Offer

二. 代碼

package week_4;
/**難度係數:***
 * 劍指offer: 樹的鏡像
 * 方法:前序遍歷,交換左右子樹
 * 測試用例:功能測試(正常樹/樹爲空/單節點/只有左子樹或右子樹)
 * @author dingding
 * Date:2017-7-3 10:35
 * Declaration: All Rights Reserved!
 */
public class No19 {

    public static void main(String[] args) {
        test1();
        test2();
        test3();
        test4();
    }
    //solution,前序遍歷
    private static void MirrorRecursively(BinaryTreeNode root){
        //遞歸結束條件
        if (root == null) {
            return;
        }
        //到葉子節點
        if (root.left == null && root.right == null) {
            return;
        }

        //交換左右子樹
        BinaryTreeNode pTemp = root.left;
        root.left = root.right;
        root.right = pTemp;
        if (root.left!=null) {
            MirrorRecursively(root.left);
        }

        if (root.right!=null) {
            MirrorRecursively(root.right);
        }
    }

    //中序遍歷打印二叉樹
    private static void printTree(BinaryTreeNode root){
        if (root!=null){
            printTree(root.left);
            System.out.print(root.value + " ");
            printTree(root.right);
        }
    }
    /*==================測試用例================*/
    //普通二叉樹
    private static void test1() {
        BinaryTreeNode root = new BinaryTreeNode(8);
        root.left = new BinaryTreeNode(6);
        root.right = new BinaryTreeNode(10);
        root.left.left = new BinaryTreeNode(5);
        root.left.right = new BinaryTreeNode(7);
        root.right.left = new BinaryTreeNode(9);
        root.right.right = new BinaryTreeNode(11);

        MirrorRecursively(root);
        printTree(root);
        System.out.println();
    }

    //只有左子樹
    private static void test2() {
        BinaryTreeNode root = new BinaryTreeNode(8);
        root.left = new BinaryTreeNode(6);
        root.left.left = new BinaryTreeNode(5);

        MirrorRecursively(root);
        printTree(root);
        System.out.println();
    }

    //只有一個節點
    private static void test3() {
        BinaryTreeNode root = new BinaryTreeNode(8);
        root.left = new BinaryTreeNode(6);

        MirrorRecursively(root);
        printTree(root);
        System.out.println();
    }

    //空樹
    private static void test4() {
        MirrorRecursively(null);
        printTree(null);
    }

}


有不妥當之處,麻煩告知:D

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章