简洁网站,wordpress更改地址后404.3,承德市隆化城乡建设局网站,网站建设优化服务好么#思路 1、二叉树不同于数的构建#xff0c;在树节点类中#xff0c;有数据#xff0c;左子结点#xff0c;右子节点三个属性#xff0c;在树类的构造函数中#xff0c;添加了变量maxNodes#xff0c;用于后续列表索引的判断
2.GetTreeNode()函数是常用方法#xff0c;…#思路 1、二叉树不同于数的构建在树节点类中有数据左子结点右子节点三个属性在树类的构造函数中添加了变量maxNodes用于后续列表索引的判断
2.GetTreeNode()函数是常用方法用于获取不同节点的索引
3、Create(是重点与树的区别在于树的索引和节点值是自己设置的而二叉树构建
树的过程传入的主要参数是数组a,所以对应索引的节点值需要根据二叉树索引特点自己构建
4、三种遍历过程就是按照不同方式访问树的节点以前序遍历为例构建函数的过程就是访问当前节点的值此功能由visit()完成然后递归的访问左子结点和右子节点如果深入递归的遍历过程思维会混乱不如明确递归函数书写的根本
①这个函数功能是什么完成这个功能
②递归的基本要求是随着遍历的每一次深入需要回来因此需要一个判断便于函数返回
③具备深搜的基本条件每一个节点都有三个属性
索引作为节点的唯一标识符在创建时会储存在一个顺序表中。
回到创建树的过程create()过程由传入参数可知根节点的值和索引是确定的当确定第一个节点值时会继续对此节点添加左右子节点而新连接成的节点索引不同他们也具有三个属性。所以实际上这些节点依据索引的不同被访问和划分每一个节点都有向下的枢纽完成遍历过程。
class TreeNode:def __init__(self, valNone, leftNone, rightNone):self.val valself.right rightself.left leftclass Tree:def __init__(self, maxNodes):self.root Noneself.nodes [TreeNode() for i in range(maxNodes)]self.nodesSize maxNodesdef GetTreeNode(self, id):return self.nodes[id]def visit(self, node):print(node.val, end)def Create(self, a, size, nodeId):if nodeId size or a[nodeId] None:return NonenowNode self.GetTreeNode(nodeId)nowNode.val a[nodeId]nowNode.left self.Create(a, size, nodeId * 2)nowNode.right self.Create(a, size, nodeId * 2 1)return nowNodedef CreateTree(self, a):self.root self.Create(a, len(a), 1)def preOrder(self, node):if node:self.visit(node)self.preOrder(node.left)self.preOrder(node.right)def preOrederTraversal(self):self.preOrder(self.root)print()def inOrder(self, node):if node:self.inOrder(node.left)self.visit(node)self.inOrder(node.right)def inOrederTraversal(self):self.inOrder(self.root)print()def postOrder(self, node):if node:self.visit(node)self.postOrder(node.left)self.postOrder(node.right)def postOrederTraversal(self):self.postOrder(self.root)print()def Test():a [None, a, b, c, d, None, e, f, g, h, None, None, None, None, i]T Tree(15)T.CreateTree(a)T.postOrederTraversal()T.inOrederTraversal()T.postOrederTraversal()Test()