• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

二分木(bst)をdfsで探索

date: 2021-03-28 excerpt: 二分木(bst)をdfsで探索する

tag: algorithmdata structureデータ構造bstbinary tree二分木


二分木をdfsで探索する

概要

  • 二分木はdfsで探索できる
    • 帰り際に値を取得することで、昇順に値を取り出すことができる
      • 逆を考えると、昇順が成立していないと、それは二分木ではない

pythonでの実装

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

# bst(二分木)が成立するかの判定
def isValidBST(root: Optional[TreeNode]) -> bool:
    ret = solve(root)
    # 並び順が一致していること、ユニークな値であること
    if ret == sorted(ret) and len(ret) == len(set(ret)):
        return True
    return False


def dfs(node, res):
    if not node:
        return
    if node.left:
        dfs(node.left, res)
    res.append(node.val)
    if node.right:
        dfs(node.right, res)

def solve(root):
    res = []
    dfs(root, res)
    print(res)
    return res

# サンプルのbfs
root = TreeNode(val=5)
e1 = TreeNode(val=1)
root.left = e1
e7 = TreeNode(val=7)
root.right = e7
e6 = TreeNode(val=6)
e7.left = e6

solve(root)


algorithmdata structureデータ構造bstbinary tree二分木 Share Tweet