在OOP中将属性作为参数传递给方法是否正确?

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

我编写了一个递归程序来从最小到最大(按顺序)打印二叉搜索树的值,它可以用两种方式编写:

  1. 可以这样写:函数接收根作为参数,如下所示:
class TreeNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None


class BinarySearchTree:
    root = None



    def in_order(self, root):
        current = root
        if current is None:
            return
        self.in_order(current.left)
        print(current.data)
        self.in_order(current.right)



t1.in_order(t1.root)

这种方式的问题是用户必须直接访问根目录(t1.root)

  1. 可以这样编写,用户不必将 root 作为参数,但我们必须将其编写为两个函数:
    def in_order2(self):
        self.inner_inorder(self.root)

    def inner_inorder(self, current)
        if current is None:
            return
        self.in_order(current.left)
        print(current.data)
        self.in_order(current.right)


t1.in_order2()

哪种写作形式被认为更正确?

python oop binary-search-tree
1个回答
0
投票

您不需要

root
属性,只需发送
TreeNode
实例

class BinarySearchTree:
    def in_order(self, root):
        current = root
        if current is None:
            return
        self.in_order(current.left)
        print(current.data)
        self.in_order(current.right)

node1 = TreeNode(1)
node2 = TreeNode(2)
node3 = TreeNode(3)
node4 = TreeNode(4)

node1.right = node2
node2.left = node3
node2.right = node4

tree = BinarySearchTree()
tree.in_order(node1)
# Output:
# 1
# 3
# 2
# 4

tree.in_order(node2)
# Output:
# 3
# 2
# 4
© www.soinside.com 2019 - 2024. All rights reserved.