二分木(bst)をdfsで探索
date: 2021-03-28 excerpt: 二分木(bst)をdfsで探索する
二分木を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)