python树的代码与解析(深度搜索,广度搜索,先序,后序,中序)

代码

class TreeNode(): ...
class TreeNode():
    def __init__(self,data = "") -> None:
        self.data = data
        self.deep = 0
        self.__children = []
        self.parent = None
    def add(self,subTreeNode) -> TreeNode:
        assert isinstance(subTreeNode,TreeNode)
        subTreeNode.deep = self.deep + 1
        subTreeNode.parent = self
        if subTreeNode not in self.__children:
            self.__children.append(subTreeNode)
            for node in subTreeNode.__children:
                subTreeNode.add(node)
            return self
    def adds(self,*subList) -> None:
        for node in subList:
            assert isinstance(node,TreeNode)
            self.add(node)
    def printNode(self) -> None:
        print("  " * self.deep + self.data)
        for subTreeNode in self.__children:
            assert isinstance(subTreeNode,TreeNode)
            subTreeNode.printNode()
    def depthFirst(self) -> None:
        print(self.data,end = "")
        for node in self.__children:
            assert isinstance(node,TreeNode)
            node.depthFirst()
    def breadthFirst(self,b = True) -> None:
        if b:
            print(self.data,end = "")
        for node in self.__children:
            assert isinstance(node,TreeNode)
            print(node.data,end = "")
        for node in self.__children:
            assert isinstance(node,TreeNode)
            node.breadthFirst(False)
    def ABC(self) -> None:
        print(self.data,end = "")
        if len(self.__children) > 0:
            self.__children[0].ABC()
        if len(self.__children) > 1:
            self.__children[1].ABC()
    def BAC(self) -> None:
        if len(self.__children) > 0:
            self.__children[0].BAC()
        print(self.data,end = "")
        if len(self.__children) > 1:
            self.__children[1].BAC()
    def BCA(self) -> None:
        if len(self.__children) > 0:
            self.__children[0].BCA()
        if len(self.__children) > 1:
            self.__children[1].BCA()
        print(self.data,end = "")
a = TreeNode("a")
b = TreeNode("b")
c = TreeNode("c")
d = TreeNode("d")
e = TreeNode("e")
f = TreeNode("f")
g = TreeNode("g")
a.adds(b,c)
b.adds(d,e)
c.adds(f,g)
a.printNode()
a.ABC()
print()
a.BAC()
print()
a.BCA()

ABC是先序

BAC是中序

BCA是后序

讲解

树的基本参数有

数据(data),深度(deep),子树(children)和父母(parent)

这就是初始化函数

class TreeNode():
    def __init__(self,data = "") -> None:
        self.data = data
        self.deep = 0
        self.__children = []
        self.parent = None

树,不可能只有一个结点,所以我们要添加一些结点。

添加后的子树比原来的树深度+1,子树的父母是self,很好理解。

下一行是拒绝重复添加结点

添加之后,把子树的所有结点进行更新,完成。

最后返回self,是因为方便:

a.add(b.add(c))

然后在add的基础上做一个adds就可以了

class TreeNode():
    def __init__(self,data = "") -> None:
        self.data = data
        self.deep = 0
        self.__children = []
        self.parent = None
    def add(self,subTreeNode) -> TreeNode:
        assert isinstance(subTreeNode,TreeNode)
        subTreeNode.deep = self.deep + 1
        subTreeNode.parent = self
        if subTreeNode not in self.__children:
            self.__children.append(subTreeNode)
            for node in subTreeNode.__children:
                subTreeNode.add(node)
            return self
    def adds(self,*subList) -> None:
        for node in subList:
            assert isinstance(node,TreeNode)
            self.add(node)

深度优先搜索

把self打印

然后对每一颗子树进行深度优先搜索

广度优先搜索

把根节点打印,然后打印子树根结点,然后对子树进行广度优先搜索

先序,后序,中序要用迭代的方式,没有问题。

结束

这是树的实现和搜索,对于一些问题可以快速解决,应该很有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值