Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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