def splitSubLeft(root): pivot = root.right moveNode = pivot.left.left rightNode = pivot.left.right newInterNode = TreeNode(0) newInterNode.left = root.left newInterNode.right = moveNode newInterNode.Count = newInterNode.left.Count + newInterNode.right.Count pivot.left = None pivot.left = rightNode pivot.Count = pivot.left.Count + pivot.right.Count root.left = newInterNode return root
def splitSubRight(root): if root.Count == 6: debugHere = True pivot = root.left moveNode = pivot.right.right leftNode = pivot.right.left newInterNode = TreeNode(0) newInterNode.right = root.right newInterNode.left = moveNode newInterNode.Count = newInterNode.left.Count + newInterNode.right.Count pivot.right = None pivot.right = leftNode pivot.Count = pivot.left.Count + pivot.right.Count root.right = newInterNode return root
def prepareTree(orderDict): filePath = 'input/pcp_merge.csv' file = open(filePath, 'r') file.readline() steps = [] steps.append(TreeNode(-1)) for lineStr in file: pieces = lineStr.replace('"', '')[:-1].split(',') source = int(pieces[0]) target = int(pieces[1]) if source < 0: #source is a nodeIndex leftNode = TreeNode(abs(source)) else: leftNode = steps[source] if target < 0: rightNode = TreeNode(abs(target)) else: rightNode = steps[target] newRoot = TreeNode(0) newRoot.Count = leftNode.Count + rightNode.Count newRoot.left = leftNode newRoot.right = rightNode leftOrder = orderDict[getLeftmostNode(leftNode).Value] rightOrder = orderDict[getLeftmostNode(rightNode).Value] if leftOrder > rightOrder: newRoot.left, newRoot.right = newRoot.right, newRoot.left newRoot = checkAndRotate(newRoot) steps.append(newRoot) file.close() return newRoot