字節跳動面試題之鏡像二叉樹

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

例如輸入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
鏡像輸出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

實例:

輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]

解題思路是樹的廣度優先遍歷,這裏還有一個數據交換問題,是數組數據塊數據交換問題的延伸題目,有興趣的可以去看看左神的  A B      A BA  交換問題。 


import java.util.ArrayList;
import java.util.List;

public class test7 {

    public TreeNode mirrorTree(TreeNode root) {
        if(root == null){
            return root;
        }
        List<TreeNode> list = new ArrayList<>();
        list.add(root);
        while (list.size()>0){
            List<TreeNode> newList = new ArrayList<>();
            for(int i = 0;i<list.size();i++) {
                TreeNode treeNode = list.get(i);
                TreeNode node3 = treeNode.left;
                treeNode.left = treeNode.right;
                treeNode.right = node3;
                if(treeNode.left!=null){
                    newList.add(treeNode.left);
                }
                if(treeNode.right!=null){
                    newList.add(treeNode.right);
                }
            }
            list = newList;
        }

        return root;
    }



    public static void main(String[] args) {

        test7 test7 = new test7();

        TreeNode treeNode1 = new TreeNode(4);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode3 = new TreeNode(7);
        TreeNode treeNode4 = new TreeNode(1);
        TreeNode treeNode5 = new TreeNode(3);
        TreeNode treeNode6 = new TreeNode(6);
        TreeNode treeNode7 = new TreeNode(9);


        treeNode1.left =treeNode2;
        treeNode1.right = treeNode3;

        treeNode2.left = treeNode4;
        treeNode2.right = treeNode5;

        treeNode3.left = treeNode6;
        treeNode3.right = treeNode7;

        TreeNode treeNode = test7.mirrorTree(treeNode1);
        System.out.println(treeNode);
    }


}

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    public  TreeNode(int x) { val = x; }
}

輸出結果:

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