链表二叉树BinaryTree

204 阅读1分钟

链表二叉树BinaryTree

#!/usr/bin/env python2.7
# -*- conding: utf-8 -*-
# @Time : 2020/9/29 14:49
# @Author : ada
# @file : binarytree.py.py
# @Project: python-script 
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:
            print 'enter create newnode for left'
            '''
            在有左子节点的情况下,先建一个临时节点,把现有的左子结点值指向临时节点的左子树,再把现有节点的左子树指向临时节点
            
            A.leftchild --> B,newnode(T),T.leftchild=B,A.leftchild --> T
            
            先建新节点T,把原先左子树指向临时节点的左子树,让出坑位,再把父节点的左子对指向T
            
            插入右子树同样道理
            '''
            t = BinaryTree(newNode)
            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 '###'
print(r.getLeftChild())
print '# get left root'
print(r.getLeftChild().getRootVal())
r.insertRight('c')
print(r.getRightChild())
print(r.getRightChild().getRootVal())
r.getRightChild().setRootVal('hello')
print(r.getRightChild().getRootVal())

'''
因为左子树节点的值也是一个类创建的对象,所以不能直接取,只能先取取左子树对象,再用左子树对象的方法  print(r.getLeftChild().getRootVal())
'''