我如何修改我的方法以打印整个字符串,而不是仅打印二进制树中的一个元素?

问题描述 投票:-1回答:1

所以我设法构造了string方法,以便能够打印二进制树中的元素,但是问题是我希望它将整个二进制树打印为one字符串,而不是将元素分开。我的尝试是创建一个附加元素的列表,然后仅打印该列表。

[当我尝试这种方法时,问题是当从树中获取元素时,列表仅打印最新元素,即length =1。当我尝试全局创建列表时,一切都很好,但是我想避免使用全局变量。我将链接整个代码,但具体链接其需要修复的string方法。链接的代码与全局列表l1

l1 = []

class BinaryTree:

    def __init__(self):
        """Constructor for the binary tree."""
        self._root = None
        self._left = None
        self._right = None
        self._size = 0
        self.l = []

    def add(self, root):
        """Add a given element to the binary tree."""
        if self._root:
            if root < self._root:
                if self._left is None:
                    self._left = BinaryTree()
                self._left.add(root)
                self._size += 1
            elif root > self._root:
                if self._right is None:
                    self._right = BinaryTree()
                self._right.add(root)
                self._size += 1
        else:
            self._root = root
            self._size = 1

    def string(self):
        '''Prints the entire tree as a string.'''
        #current = self._root
        if self._left:
            self._left.string()
        #print(self._root)
        l1.append(self._root)
        if self._right:
            self._right.string()
        return l1

    def len(self):
        '''Returns the size of the tree (# of elements in the tree).'''
        return self._size

def new():
    """Creates new instance."""
    return BinaryTree()

def main():
    test = new() # Test for new BT
    test.add('c')
    test.add('b')
    test.add('a')
    print(test.string())
    assert test.len() == 3

if __name__ == '__main__': main()
python python-3.x binary-tree binary-search-tree
1个回答
0
投票

不是使用全局变量来累积结果,而是可以从递归调用中return节点并在调用方法中进行累积。

请参阅我定义的traverse方法。它正在对树进行有序遍历。 string()方法只是成为str()返回的结果的traverse()

class BinaryTree:

    def __init__(self):
        """Constructor for the binary tree."""
        self._root = None
        self._left = None
        self._right = None
        self._size = 0
        self.l = []

    def add(self, root):
        """Add a given element to the binary tree."""
        if self._root:
            if root < self._root:
                if self._left is None:
                    self._left = BinaryTree()
                self._left.add(root)
                self._size += 1
            elif root > self._root:
                if self._right is None:
                    self._right = BinaryTree()
                self._right.add(root)
                self._size += 1
        else:
            self._root = root
            self._size = 1

    def traverse(self):
        '''Prints the entire tree as a string.'''
        to_print = []
        if self._left:
            to_print.extend(self._left.traverse())
        to_print.append(self._root)
        if self._right:
            to_print.extend(self._right.traverse())
        return to_print

    def string(self):
        return str(self.traverse())

    def len(self):
        '''Returns the size of the tree (# of elements in the tree).'''
        return self._size


def new():
    """Creates new instance."""
    return BinaryTree()


def main():
    test = new()  # Test for new BT
    test.add('c')
    test.add('b')
    test.add('a')
    print(test.traverse())
    assert test.len() == 3


if __name__ == '__main__':
    main()

© www.soinside.com 2019 - 2024. All rights reserved.