python学习 2019-2-19
时间:2019-02-20
本文章向大家介绍python学习 2019-2-19,主要包括python学习 2019-2-19使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一,名词:
根 边 树叶(叶子) 兄弟 祖父和孙子 路径 路径的长 深度 高
祖先 后裔 真祖先 真后裔
二,树的实现
class TreeNode():
def init(self,data,firstchild,nextSibling):
self.data = data
self.firstchild = firstchild
self.nextSibling = nextSibling
三,树的遍历
深度优先
广度优先
四,二叉树
最多两个孩子
五,二叉查找树(搜索树)
添加
遍历(深度优先)
递归
#树的实现
class TreeNode():
def __init__(self,data,firstchild,nextSibling):
self.data = data
self.firstchild = firstchild
self.nextSlibling = nextSibling
class TreeNode():
def __init__(self,data,left = None,right = None):
self.data = data
self.left = left
self.right = right
class Tree():
def __init__(self):
self.root = None
#添加数据
def add(self,data):
node = TreeNode(data)
if self.root == None:
self.root = node
else:
currentNode = self.root
while True:
if data<currentNode.data:
if currentNode.left == None:
currentNode.left = node
break
else:
currentNode = currentNode.left
continue
else:
if currentNode.right == None:
currentNode.right = node
break
else:
currentNode = currentNode.right
continue
#判断是否包含数据
def contains(self,data):
flag = False
if self.root == None:
print("空树!!!")
else:
currentNode = self.root
while True:
if currentNode.data == data:
flag = True
break
else:
if data < currentNode.data:
if currentNode.left == None:
break
currentNode = currentNode.left
else:
if currentNode.right == None:
break
currentNode = currentNode.rigt
return flag
#查找最小值
def findMin(self):
temp_min = None
if self.root == None:
print("空树!!!")
else:
currentNode = self.root
while currentNode.left != None:
currentNode = currentNode.left
temp_min = currentNode.data
return temp_min
#查找最大值
def findMax(self):
temp_max = None
if self.root == None:
print("空树")
else:
currentNode = self.root
while currentNode.right != None:
currentNode = currentNode.right
temp_max = currentNode.data
return temp_max
#删除
def remove(self,root,data):
if self.contains(data):
pre_currentNode = None
currentNode = root
while True:
if currentNode.data == data:
#叶子节点
if currentNode.left == None and currentNode.right == None:
del currentNode
break
#一个孩子节点
elif currentNode.left == None and currentNode.right != None:
if pre_currentNode == None:
self.root = currentNode.right
break
else:
if pre_currentNode.right == currentNode:
pre_currentNode.right = currentNode.right
else:
pre_currentNode.left = currentNode.right
break
elif currentNode.left != None and currentNode.right == None:
if pre_currentNode == None:
self.root = currentNode.left
break
else:
if pre_currentNode.right == currentNode:
pre_currentNode.right = currentNode.left
else:
pre_currentNode.left = currentNode.left
break
#两个孩子节点
else:
minNode = currentNode.right
while minNode.left != None:
minNode = minNode.left
currentNode.data = minNode.data
self.remove(currentNode.right,minNode.data)
break
else:
if data < currentNode.data:
pre_currentNode = currentNode
currentNode = currentNode.left
else:
pre_currentNode = currentNode
currentNode = currentNode.right
#树中没有数据
else:
print("数据不存在")
#查找(深度优先)
def showAll(self,root):
if root ==None:
print("空树")
else:
if self.root.data == root.data:
print(self.root.data)
if root.left != None:
print(root.left.data)
self.showAll(root.left)
if root.right != None:
print(root.right.data)
self.showAll(root.right)
tree = Tree()
tree.add(6)
tree.add(2)
tree.add(8)
tree.add(1)
tree.add(5)
tree.add(3)
tree.add(4)
tree.remove(tree.root,2)
tree.showAll(tree.root)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux查看CUDA版本以及cudnn版本号
- 数据结构算法操作试题(C++/Python)——最长有效括号
- 数据结构算法操作试题(C++/Python)——两两交换链表中的节点
- 数据结构算法操作试题(C++/Python)——最大子序和
- 数据结构算法操作试题(C++/Python)——四数之和
- 数据结构算法操作试题(C++/Python)——在排序数组中查找元素的第一个和最后一个位置
- 数据结构算法操作试题(C++/Python)——搜索旋转排序数组
- 数据结构算法操作试题(C++/Python)——最后一个单词的长度
- IDEA 自动生成类注释和方法注释
- 包管理工具yarn的安装和使用详细介绍
- redis学习(九)
- 模型性能提升操作
- FM算法解析及Python实现
- 排序算法:快速排序解析及Python实现
- dubbo学习之本地存根实践