dsadasd
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root1 == null) return root2;
if(root2 == null) return root1;
TreeNode mergeTree = new TreeNode(root1.val + root2.val);
mergeTree.left = mergeTrees(root1.left , root2.left);
mergeTree.right = mergeTrees(root1.right , root2.right);
return mergeTree;
}
}
dsadasd
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
//解题思路1:bfs思想,用到了队列
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 tmp = node.right;
node.right = node.left;
node.left =tmp;
if(node.left !=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
}
return root;
}
}
//解题思路2:递归思想,可以说成后序 遍历,先左后右,自下向上
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) return null;
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}
//解题思路3:递归思想,可以说成中序,先左后中再右,
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null){
return null;
}
//先遍历左边
invertTree(root.left);
//然后保存右边,把左边的还到右边
TreeNode right = root.right;
root.right = root.left;
root.left = right;
//然后遍历右边,但是此时右节点已经换到了左结点,所以为root.left
invertTree(root.left);
return root;
}
}