树的结构

2021-01-02  本文已影响0人  九日火

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

思路:
检索当前树是否存在相似的值,如存在继续检查节点的分支。

package main


import "fmt"

type TreeNode struct {
    Val     int
    Left    *TreeNode
    RIght   *TreeNode
}

func FindSubTree(p, c *TreeNode) bool {
    if p == nil {return false}
    if c == nil {return true}

    if p.Val == c.Val {
        if HasSub(p, c) {
            return true
        }
    }

    return FindSubTree(p.Left, c) || FindSubTree(p.RIght, c)
}

func HasSub(p, c *TreeNode) bool {
    if c == nil {return true}
    if p == nil {return true}

    if p.Val != c.Val {
        return true
    }

    return HasSub(p.RIght, c.RIght) && HasSub(p.Left, c.Left)
}
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def TreeHasNode(self, pRoot1, pRoot2):
        if pRoot2 == None:
            return True
        elif pRoot1 == None:
            return False

        elif pRoot1.val == pRoot2.val:
            return HasNode(pRoot1, pRoot2)
        return TreeHasNode(pRoot1.left, pRoot2) or TreeHasNode(pRoot1.right, pRoot2)


    def HasNode(self, pRoot1, pRoot2):
        if pRoot2 == None:
            return True
        elif pRoot1 == None:
            return False
        elif pRoot1.val != pRoot2.val:
            return True
        return HasNode(pRoot1.left, pRoot2) and HasNode(pRoot2.right, pRoot2)
        ```
上一篇 下一篇

猜你喜欢

热点阅读