• 树的子结构-剑指Offer


    树的子结构

    题目描述

    输入两颗二叉树A,B,判断B是不是A的子结构。

    思路

    分两步来实现

    1. 先判断Tree1里的节点有没有和Tree2的根节点相同值得节点,递归的判断,若有,侧判断第二步,否则,返回false
    2. 从这个有相同值的节点开始判断,递归的左右对应的判断子树是否相等,注意空指针的情况
    3. 注意:在编写遍历树的代码时一定要高度警惕,在每一处要访问地址的时候都要问问自己这个地址有没有可能是NULL,如果是该怎么处理。(为了确保自己代码的完整正确,写完代码后要多用几个测试用例检验自己的程序)

    代码

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public boolean HasSubtree(TreeNode root1,TreeNode root2) {
    		boolean result = false;
    		if (root1 != null && root2 != null) {
    			if (root1.val == root2.val) {
    				
    				result = DoesTree1HasTree2(root1, root2);
    			}
    			if (!result) {
    				result = HasSubtree(root1.left, root2);
    			}
    			if (!result) {
    				result = HasSubtree(root1.right, root2);
    			}
    		}
    		return result;
        }
    	public boolean DoesTree1HasTree2(TreeNode root1, TreeNode root2) {
    		if (root2 == null) {
    			return true;
    		}
    		if (root1 == null) {
    			return false;
    		}
    		if (root1.val != root2.val) {
    			return false;
    		}
    		return DoesTree1HasTree2(root1.left, root2.left) && DoesTree1HasTree2(root1.right, root2.right);
    	}
    }
  • 相关阅读:
    UVA 125 Numbering Paths
    UVA 515 King
    UVA 558 Wormholes
    UVA 10801 Lift Hopping
    UVA 10896 Sending Email
    SGU 488 Dales and Hills
    HDU 3397 Sequence operation
    数据库管理工具navicat的使用
    javascript封装animate动画
    关于webpack没有全局安装下的启动命令
  • 原文地址:https://www.cnblogs.com/rosending/p/5618102.html
Copyright © 2020-2023  润新知