image
題目
image
題目地址
解題思路
這道題比較簡單,大家可以自己先想想
。。。
。。。
??
。。。
??
。。。
反轉(zhuǎn)二叉樹的目的就是交換每個結(jié)點的左右結(jié)點
遞歸解題
子問題就出來,交換兩個結(jié)點即可。對每一個遞歸到的元素都執(zhí)行這個操作。返回值和終止條件就是遍歷完所有元素返回根結(jié)點。
迭代解題
如果使用層序遍歷,也只要在遍歷下面的一層時,交換左右子樹即可。
比如,上面的樹為例,第一層是4,第二層是7,2。遍歷4時,我們交換7和2,然后放入隊列中,遍歷7和2時,同樣如此。
遞歸代碼
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
//終止條件為空時
return null;
}
//子問題:交換左右子樹
TreeNode left = root.left;
root.left = root.right;
root.right = left;
//遞歸上面的子問題
invertTree(root.left);
invertTree(root.right);
//返回結(jié)果
return root;
}
}
迭代代碼
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
//使用隊列
LinkedList<TreeNode> list = new LinkedList<>();
list.add(root);
while(!list.isEmpty()){
TreeNode tree = list.poll();
if(tree != null){
//交換左右兩個結(jié)點
TreeNode left = tree.left;
tree.left = tree.right;
tree.right = left;
//BFS
if(tree.left != null){
list.add(tree.left);
}
if(tree.right != null){
list.add(tree.right);
}
}
}
return root;
}
}