首先
例題
翻轉(zhuǎn)二叉樹
大佬sunchunlei代碼:
利用前序遍歷
class Solution {
// 先序遍歷--從頂向下交換
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
// 保存右子樹
TreeNode rightTree = root.right;
// 交換左右子樹的位置
root.right = invertTree(root.left);
root.left = invertTree(rightTree);
return root;
}
}
利用中序遍歷
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
invertTree(root.left); // 遞歸找到左節(jié)點
TreeNode rightNode= root.right; // 保存右節(jié)點
root.right = root.left;
root.left = rightNode;
// 遞歸找到右節(jié)點 繼續(xù)交換 : 因為此時左右節(jié)點已經(jīng)交換了,所以此時的右節(jié)點為root.left
invertTree(root.left);
}
}
利用后序遍歷
class Solution {
public TreeNode invertTree(TreeNode root) {
// 后序遍歷-- 從下向上交換
if (root == null) return null;
TreeNode leftNode = invertTree(root.left);
TreeNode rightNode = invertTree(root.right);
root.right = leftNode;
root.left = rightNode;
return root;
}
}
利用層次遍歷
class Solution {
public TreeNode invertTree(TreeNode root) {
// 層次遍歷--直接左右交換即可
if (root == null) return null;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
TreeNode node = queue.poll();
TreeNode rightTree = node.right;
node.right = node.left;
node.left = rightTree;
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
return root;
}
}
持續(xù)補充中柳沙。跃赚。囱晴。。