leetcode——226 Invert Binary Tree(翻轉二叉樹,會做就能進Google哦~~),leetcodeinvert
Invert a binary tree.
4/ \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \ 9 6 3 1Trivia:
This problem was inspired by this original tweet by Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
解題思路:
直接擷取根節點的左右節點,然後進行交換即可。方法一直接進行交換,方法二使用二叉樹層次遍曆,話不多說直接上代碼。
方法一代碼:
public TreeNode invertTree(TreeNode root){if (root==null){return null;}TreeNode left=root.left;TreeNode right=root.right;root.left=invertTree(right);root.right=invertTree(left);return root;}
方法二代碼:
public static TreeNode invertTree1(TreeNode root){ if(root == null) { return null; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); //向列隊中添加元素 queue.offer(root); while(!queue.isEmpty()) { //擷取並移出元素 TreeNode node = queue.poll(); TreeNode left = node.left; node.left = node.right; node.right = left; if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } } return root;}
列隊說明:隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空白隊列。
在隊列這種資料結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將是最後被刪除的元素,因此隊列又稱為“先進先出”(FIFO—first in first out)的線性表。
在java5中新增加了java.util.Queue介面,用以支援隊列的常見操作。該介面擴充了java.util.Collection介面。
Queue使用時要盡量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來擷取並移出元素。它們的優點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會拋出異常。
如果要使用前端而不移出該元素,使用element()或者peek()方法。