1. 程式人生 > >劍指Offer之二叉樹的映象

劍指Offer之二叉樹的映象

題目描述

操作給定的二叉樹,將其變換為源二叉樹的映象。

輸入描述:

二叉樹的映象定義:源二叉樹 
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11
    	映象二叉樹
    	    8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9 7  5

解題思路,遞迴遍歷樹,將樹的左右孩子交換即可。

public class 二叉樹的映象 {
    public static void Mirror(TreeNode root) {
        //這樣的情況,為空如何處理
        if (root == null){
            System.out.println("輸入為空。。。");
        }
        TreeNode my = switchNode(root);
        System.out.println(my.val);
    }
    //定義交換函式
    public static TreeNode switchNode(TreeNode treeNode){
        if (treeNode == null){
            return treeNode;
        }
        //交換左右孩子
        TreeNode left = treeNode.left;
        TreeNode right = treeNode.right;
        treeNode.right = left;
        treeNode.left = right;
        //判斷左右孩子是不是為空,不為空,將左右孩子的孩子交換
        if (treeNode.right!=null){
            switchNode(treeNode.right);
        }
        //這兒不能使用else if,使用else if當上一個if為true時候,就不會執行了!!!注意
        if (treeNode.left!=null){
            switchNode(treeNode.left);
        }
        return treeNode;
    }

    public static void main(String [] args){
        TreeNode treeNode1_1 = new TreeNode(8);
        TreeNode treeNode1_2 = new TreeNode(6);
        TreeNode treeNode1_3 = new TreeNode(10);
        TreeNode treeNode1_4 = new TreeNode(5);
        TreeNode treeNode1_5 = new TreeNode(7);
        TreeNode treeNode1_6 = new TreeNode(9);
        TreeNode treeNode1_7 = new TreeNode(11);
        treeNode1_1.left = treeNode1_2;
        treeNode1_1.right = treeNode1_3;
        treeNode1_2.left = treeNode1_4;
        treeNode1_2.right = treeNode1_5;
        treeNode1_3.left = treeNode1_6;
        treeNode1_3.right = treeNode1_7;
        Mirror(treeNode1_1);
    }
}

堅持寫程式碼,相信總會提高的!