亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

打印二叉搜索樹的右子樹中的所有節點

打印二叉搜索樹的右子樹中的所有節點

至尊寶的傳說 2022-08-31 16:24:18
我對數據結構和遞歸相當陌生。因此,我決定嘗試實現一種方法,該方法將在此給定樹中打印右側子樹的所有節點的所有值(按升序排列,即:50,65,72,91,99),就像學習經驗一樣。這是我正在使用的樹,視覺上。我在理解如何通過正確的子樹遞歸方面遇到了很多問題。這就是我到目前為止嘗試過的方法(實際方法在底部):class BinarySearchTree:    _root: Optional[Any]    # The left subtree, or None if the tree is empty.    _left: Optional[BinarySearchTree]    # The right subtree, or None if the tree is empty.    _right: Optional[BinarySearchTree]def __init__(self, root: Optional[Any]) -> None:    """Initialize a new BST containing only the given root value.    """    if root is None:        self._root = None        self._left = None        self._right = None    else:        self._root = root        self._left = BinarySearchTree(None)        self._right = BinarySearchTree(None)def is_empty(self) -> bool:    """Return True if this BST is empty.    >>> bst = BinarySearchTree(None)    >>> bst.is_empty()    True    """    return self._root is None# That is what I have tried doing so far.def print_right_subtree(self) -> None:    """Print the right subtree in order    >>> bst = BinarySearchTree(41)    >>> left = BinarySearchTree(20)    >>> left._left = BinarySearchTree(11)    >>> left._right = BinarySearchTree(29)    >>> left._right._right = BinarySearchTree(32)    >>> right = BinarySearchTree(65)    >>> right._left = BinarySearchTree(50)    >>> right._right = BinarySearchTree(91)    >>> right._right._left = BinarySearchTree(72)    >>> right._right._right = BinarySearchTree(99)    >>> bst._left = left    >>> bst._right = right    >>> bst.print_right_subtree()    50    65    72    91    99    """    if self.is_empty():        pass    else:        # I am not really sure what to do here...         # I have tried setting self._left = None, but that just made things even more complicated!        print(self._root)        self._right.print_right_subtree()任何幫助將不勝感激!另外,如果你們中的任何一個人有一個我可以遵循的教程,那對于像我這樣的新手來說真的很棒,:)。
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

如果要打印右側子樹中的節點,則只需調用與他的右側節點對應的樹的屬性即可。print_tree


首先,定義一個print_tree方法:


def print_tree(self) -> None:

    if self.is_empty():

        pass

    else:

        # you are free to do additional things here such as print node value or etc..

        self._left.print_tree()

        self._right.print_tree()

然后是print_right_subtree方法:


def print_right_subtree(self) -> None:

    self._right.print_tree() # which correspond to the print_tree of the _right attribute



查看完整回答
反對 回復 2022-08-31
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

由于您不是在要求代碼本身,而是在尋求幫助來編寫自己的代碼......

  1. 有一百萬種方法可以做到這一點。有些更優化。有些寫得更快。這完全取決于您的需求。

  2. 在這里,我認為你需要了解一棵樹是什么。你的任何子樹,本身就是一棵樹。所以,你必須明白,這確實意味著任何事情。例如,只有每棵樹的正確分支?還是第一個右枝的所有樹?也許是第二個分支?print the right tree

  3. 如果我做對了(Da bum tss?。阆朐谀愕募軜嬌洗蛴涞恼_分支,稱為根。為什么不說呢?這樣,即使您想從子樹開始打印樹,也很容易做到這一點!I want to print all the numbers above 41

  4. 您需要可視化您的算法將執行的操作。在這里,您要打印 41(主樹的右分支)以上的所有數字。讓我為此編寫偽代碼(假設您已經在值為65的根節點上:

    • 我想按升序寫所有數字...

    • 我的根是65。我的左邊是50歲,我的右邊是91歲。

    • 哪個是最低的?50. 它還有其他分支嗎?不。打印它!

    • 我的根仍然是65,我的權利是91。我的根低于我的樹枝?打印它!然后轉到正確的分支。

    • 我的主要現在是91,我的左邊是72,我的右邊是99。

    • 哪個是最低的?你得到了遞歸。


即使經過所有這些,您仍然可以選擇使另一個更快 - 編寫,而不是計算!- 解決方案。從您需要的分支中收集所有值,并打印排序的值!


查看完整回答
反對 回復 2022-08-31
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號