ホームページ > バックエンド開発 > Python チュートリアル > Python を使用してバイナリ ツリー トラバーサルを実装する方法

Python を使用してバイナリ ツリー トラバーサルを実装する方法

WBOY
リリース: 2023-06-09 21:12:06
オリジナル
2102 人が閲覧しました

一般的に使用されるデータ構造として、バイナリ ツリーはデータの保存、検索、並べ替えによく使用されます。バイナリ ツリーの走査は、非常に一般的な操作の 1 つです。シンプルで使いやすいプログラミング言語である Python には、バイナリ ツリー トラバーサルを実装するためのメソッドが多数あります。この記事では、Python を使用してバイナリ ツリーの事前順序、順序内、および順序後の走査を実装する方法を紹介します。

バイナリ ツリーの基本

バイナリ ツリーの走査方法を学ぶ前に、バイナリ ツリーの基本概念を理解する必要があります。バイナリ ツリーはノードで構成され、各ノードには値と 2 つの子 (左の子と右の子) があります。ノードの子は空にすることもできます。

バイナリ ツリー トラバーサル

バイナリ ツリー トラバーサルとは、バイナリ ツリー内のすべてのノードを特定の順序で訪問することを指します。一般的に使用されるトラバーサル方法には、前順序トラバーサル、順序内トラバーサル、後順序トラバーサルの 3 つがあります。

プレオーダー トラバーサル

プレオーダー トラバーサルの順序は、ルート ノード、左のサブツリー、右のサブツリーです。特定の実装では、最初にルート ノードの値を出力し、次に左のサブツリーと右のサブツリーを再帰的に走査できます。

以下は Python コードの実装です:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def preorderTraversal(root: TreeNode):
    if root is None:
        return []
    res = [root.val]
    res += preorderTraversal(root.left)
    res += preorderTraversal(root.right)
    return res
ログイン後にコピー

順序トラバーサル

順序トラバーサルの順序は、左のサブツリー、ルート ノード、右のサブツリーです。特定の実装では、左のサブツリーを再帰的に走査し、ルート ノードの値を出力してから、右のサブツリーを再帰的に走査する必要があります。

以下は Python コードの実装です:

def inorderTraversal(root: TreeNode):
    if root is None:
        return []
    res = []
    res += inorderTraversal(root.left)
    res.append(root.val)
    res += inorderTraversal(root.right)
    return res
ログイン後にコピー

事後走査

事後走査の順序は、左サブツリー、右サブツリー、ルート ノードです。具体的な実装では、左のサブツリーと右のサブツリーを再帰的に走査し、最終的にルート ノードの値を出力する必要があります。

以下は Python コードの実装です:

def postorderTraversal(root: TreeNode):
    if root is None:
        return []
    res = []
    res += postorderTraversal(root.left)
    res += postorderTraversal(root.right)
    res.append(root.val)
    return res
ログイン後にコピー

概要

Python では、バイナリ ツリー トラバーサルを使用すると、前順序、中間順序、後順序を実現できます。再帰による順序トラバーサル。再帰のほかに、スタックや幅優先検索などの手法を使用して実装することもできます。バイナリツリートラバーサルの方法をマスターすると、日々のプログラミング作業に非常に役立ちます。

以上がPython を使用してバイナリ ツリー トラバーサルを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート