Swift-树的子结构

题目:输入两颗二叉树A和B,判断B是不是A的子结构.
核心代码:

    func hasSubTree(root:TreeNode?,subRoot:TreeNode?) -> Bool {
        var result:Bool = false
        if root != nil && subRoot != nil {
            if root!.data! == subRoot!.data! {
                result = isExistSubTree(root: root, subRoot: subRoot)
            }
            
            if !result {
               result = hasSubTree(root: root?.leftChild, subRoot: subRoot)
            }
            
            if !result {
                result = hasSubTree(root: root?.rightChild, subRoot: subRoot)
            }
        }
        
        return result
    }
    
    func isExistSubTree(root:TreeNode?,subRoot:TreeNode?) -> Bool {
        if subRoot == nil {
            return true
        }
        
        if root == nil {
            return false
        }
        
        if root!.data! != subRoot!.data! {
            return false
        }
        
        return isExistSubTree(root: root?.leftChild, subRoot: subRoot?.leftChild) && isExistSubTree(root: root?.rightChild, subRoot: subRoot?.rightChild)
    }

测试代码:

var node1 = TreeNode(data: "4",leftChild: nil,rightChild: nil)
var node2 = TreeNode(data: "7",leftChild: nil,rightChild: nil)

var node3 = TreeNode(data: "2",leftChild: node1,rightChild: node2)
var node4 = TreeNode(data: "9",leftChild: nil,rightChild: nil)

var node5 = TreeNode(data: "8",leftChild: node4,rightChild: node3)
var node6 = TreeNode(data: "7",leftChild: nil,rightChild: nil)

var rootNode = TreeNode(data: "8",leftChild: node5,rightChild: node6)

var cnode1 = TreeNode(data: "9",leftChild: nil,rightChild: nil)
var cnode2 = TreeNode(data: "2",leftChild: nil,rightChild: nil)
var subRootNode = TreeNode(data: "8",leftChild: cnode1,rightChild: cnode2)

var searchTree:SearchTree = SearchTree()
var result:Bool = searchTree.hasSubTree(root: rootNode, subRoot: subRootNode)

if result {
    print("FlyElephat-包含子🌲")
} else {
    print("FlyElephat-不包含子🌲")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,659评论 0 25
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,743评论 1 31
  • 每一代人,到老最爱听的歌大多还是年轻时候的那些腔调。 当青春逝去,在匆忙的生活中,我们的激素也趋于平淡,过着重复的...
    来似去阅读 314评论 0 2

友情链接更多精彩内容