python---BinaryTree创建树的两种方法

嵌套列表法实现树以及例子

'''
Created on 2019年10月6日
coding=utf-8  
@author: 珊珊是最棒的
'''
myTree = ['a',
          ['b',['d',[],[]],['e',[],[]]],
          ['c',['f',[],[]],[]]]
#嵌套列表创建树
def BinaryTree(r):
    return [r,[],[]]
#插入左节点
def insertLeft(root,newBranch): #新的分支
    t = root.pop(1)#和BinaryTree(r):有关,先传进去一个默认的数然后在删除t表示左子树
    if len(t)>1:
        root.insert(1,[newBranch,t,[]])
    else:
        root.insert(1,[newBranch,[],[]])
    return root
#插入右节点
def insertRight(root,newBranch):
    t = root.pop(2)
    print(t)
    if len(t)>1:
        root.insert(2,[newBranch,[],t])
    else:
        root.insert(2,[newBranch,[],[]])
    return root
#获取根节点的值
def getRootVal(root):
    return root[0]
#定义根节点的值
def setRootVal(root,newVal):
    root[0]=newVal
def getLeftChild(root):
    return root[1]
def getRightChild(root):
    return root[2]
#
r = BinaryTree(3)#r=[3,[],[]]
insertLeft(r, 4)
print(r)
insertLeft(r, 5)
print(r)
insertRight(r, 6)
print(r)
insertRight(r, 7)
print(r)
l = getLeftChild(r)
print(l)
setRootVal(r, 9)#重置根节点
print(r)#输出根节点
insertLeft(l, 11)
print(r)
print(getRightChild(getRightChild(r)))

  • 结果如图
    在这里插入图片描述

在这里插入图片描述

节点和引用法创建树(节点类)

在这里插入图片描述

'''
Created on 2019年10月6日
coding=utf-8
@author: 珊珊是最棒的
'''
class BinaryTree:#结点类
    def __init__(self,rootObj):
        self.key=rootObj      #结点值
        self.leftChild=None   #结点左孩子
        self.rightChild=None  #结点右孩子
    def insertLeft(self,newNode):
        if self.leftChild==None:
            self.leftChild=BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)  #t中间变量
            t.leftChild=self.leftChild
            self.leftChild=t   #插入结点并将原来的结点降级(有种链表插入的感觉)
    def insertRight(self,newNode):
        if self.rightChild==None:
            self.rightChild=BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t
    def getRightChild(self):
        return self.rightChild
    def getLeftChild(self):
        return self.leftChild
    def setRootVal(self,obj):#设置根的值
        self.key=obj
    def getRootVal(self):#获取根的值
        return self.key

#举个例子吧
r = BinaryTree('a')
print(r.getRootVal())
print(r.getLeftChild())
r.insertLeft('b')
print(r.getLeftChild())
print(r.getLeftChild().getRootVal())
r.insertRight('c')
print(r.getRightChild().getRootVal())
r.getRightChild().setRootVal('hello')
print(r.getRightChild().getRootVal())
  • 事实胜于雄辩
    在这里插入图片描述
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shan_shmily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值