LeetCode題解-226-Invert Binary Tree

儘管寫LeetCode解答主要是爲了自己整理思路,但是如果對您也正好有幫助,請點個贊給菜鳥一點鼓勵吧 :-)

原題



解法分析

解法1使用了遞歸;
解法2使用了迭代法,爲廣度優先的層級遍歷。

解法1

解法分析

遞歸。反轉左子樹與右子樹,最後交換根節點的左子樹與右子樹。

代碼

public class Solution226_recursive {
    public TreeNode invertTree(TreeNode root) {
        if (root == null || (root.left == null && root.right == null))
            return root;

        TreeNode invertedLeft = invertTree(root.left);
        TreeNode invertedRight = invertTree(root.right);

        root.left = invertedRight;
        root.right = invertedLeft;

        return root;
    }
}

解法2

解法分析

迭代,廣度優先搜索。棧中每次存放的是同一層的節點,將這些節點依次取出,交換左右子樹,則該層的節點全部已被反轉;執行N次,整個樹被反轉。

圖解

看不清圖的話可以在瀏覽器 頁面中單獨打開。

代碼

public class Solution226_iterator {
    public TreeNode invertTree(TreeNode root) {
        if (root == null)
            return root;

        Deque<TreeNode> treeNodeDeque = new LinkedList<TreeNode>();
        treeNodeDeque.push(root);
        while (!treeNodeDeque.isEmpty()){
            int dequeSize = treeNodeDeque.size();
            while (dequeSize-- > 0){
                TreeNode currentNode = treeNodeDeque.pop();
                TreeNode tempNode = currentNode.left;
                currentNode.left = currentNode.right;
                currentNode.right = tempNode;

                if(currentNode.left != null)
                    treeNodeDeque.addLast(currentNode.left);
                if (currentNode.right != null)
                    treeNodeDeque.addLast(currentNode.right);
            }
        }
        return root;
    }
}






















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