其他分享
首页 > 其他分享> > 剑指Offer之十八--树的子结构

剑指Offer之十八--树的子结构

作者:互联网

二叉树结构

class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}

题目描述

解析

递归实现

//判断根结点为root1的树是否包含root2结构
public boolean hasSubtree(TreeNode root1,TreeNode root2) {
	//初始化标记变量为false
	boolean hasSubtreeFlag = false;
	
	//先判断根结点,若不包含判断左孩子,其次是右孩子
	if(root1 != null && root2 != null){
		if(root1.val == root2.val){
			hasSubtreeFlag = nodesValEqual(root1,root2);
		}
		if(!hasSubtreeFlag){
			hasSubtreeFlag = hasSubtree(root1.left,root2);
		}
		if(!hasSubtreeFlag){
			hasSubtreeFlag = hasSubtree(root1.right,root2);
		}
	}
	
	return hasSubtreeFlag;
}

//判断以root1为根的树上各结点值是否与root2相等
public  boolean nodesValEqual(TreeNode root1, TreeNode root2) {
	
	if(root2 == null){
		return true;
	}
	if(root1 == null){
		return false;
	}
	if(root1.val != root2.val){
		return false;
	}
	
	return nodesValEqual(root1.left,root2.left) && nodesValEqual(root1.right,root2.right);
}


<p></p>

标签:结点,TreeNode,val,Offer,--,子结构,hasSubtreeFlag,root1,root2
来源: https://blog.csdn.net/u013129932/article/details/121602553