2022-2-19 剑指offer day9

题1:

JZ26 树的子结构

描述

输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
 
数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000
 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15     public boolean HasSubtree(TreeNode root1,TreeNode root2) {
16         if (root1==null||root2==null) return false;
17         return dfs(root1,root2) || HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
18     }
19     
20     public boolean dfs(TreeNode t1,TreeNode t2) {
21         if (t2==null) return true;
22         if (t1==null) return false;
23         if (t1.val==t2.val) return dfs(t1.left,t2.left) &&  dfs(t1.right,t2.right);
24         return false;
25     }
26 }

思路:双重递归,hassubtree表示判断 是否有子树,dfs判断两个以当前根节点匹配是否为子树。那么判断是否子树就是 以根节点匹配或者左右子树 包含子树 。

题2:

JZ27 二叉树的镜像

描述

操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 0 \le n \le 10000n1000 , 二叉树每个节点的值 0\le val \le 10000val1000
要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)
 
比如:
源二叉树
镜像二叉树
 1 import java.util.*;
 2 
 3 /*
 4  * public class TreeNode {
 5  *   int val = 0;
 6  *   TreeNode left = null;
 7  *   TreeNode right = null;
 8  *   public TreeNode(int val) {
 9  *     this.val = val;
10  *   }
11  * }
12  */
13 
14 public class Solution {
15     /**
16      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
17      *
18      * 
19      * @param pRoot TreeNode类 
20      * @return TreeNode类
21      */
22     public TreeNode Mirror (TreeNode pRoot) {
23         // write code here
24         if (pRoot!=null) {
25         TreeNode temp=pRoot.left;
26         pRoot.left=pRoot.right;
27         pRoot.right=temp;
28         Mirror(pRoot.left);
29         Mirror(pRoot.right);
30         }
31         return pRoot;
32     }
33 }

思路:递归。先交换左子树和右子树,在递归交换左右子树。

posted on 2022-02-19 13:04  阿ming  阅读(20)  评论(0编辑  收藏  举报

导航