Python-BinaryTree
앞뒤 세 가지 역행 방법은 좌우 결점의 역행 순서가 모두 같다(앞뒤 왼쪽, 뒤쪽 오른쪽). 유일하게 다른 것은 뿌리 노드의 출현 위치이다.
중역:
먼저 왼쪽에 뿌리를 내리고 나중에 오른쪽에 뿌리를 내리다
반복 구현:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def MidTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ans = []
def recurse(root):
if root:
recurse(root.left)
ans.append(root.val)
recurse(root.right)
recurse(root)
return ans
순환 실현:
트리의 순환 작업은 기본적으로 창고 (stack) 구조에 사용됩니다.현재 결점 (curr) 의 왼쪽 결점push를 창고로 옮겨 현재 결점 (curr) 이 None이 될 때까지 반복합니다.이때 팝업 창고의 첫 번째 요소는 현재 결점으로 설정하고 이 결점의value 값을 출력하며 이 결점의 오른쪽 트리를 훑어보기 시작합니다.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def MidTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
ans = []
curr = root
while stack or curr:
if curr:
stack.append(curr)
curr = curr.left
else:
curr = stack.pop()
ans.append(curr.val)
curr = curr.right
return ans
순서대로 훑어보기:
먼저 뿌리를 내리고 왼쪽에서 오른쪽으로
반복 구현:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ans = []
def recurse(root):
if root != None:
ans.append(root.val)
recurse(root.left)
recurse(root.right)
recurse(root)
return ans
순환 실현:
먼저 보고 먼저 두루 훑어보다.우리는 여전히 창고 stack을 사용합니다. 앞의 순서가 루트 좌우이기 때문에 매번 현재 결점curr를 출력하고 현재 결점push를 창고에 넣은 다음 왼쪽 결점을 현재 결점으로 설정합니다. 현재 결점 (curr) 이 None일 때까지.팝업 창고 꼭대기의 첫 번째 요소는 현재 결점으로 설정하고 이 결점의 오른쪽 나무를 훑어보기 시작합니다.입고와 출고 조건, 순환 종료 조건은 중차와 똑같다.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
ans = []
curr = root
while stack or curr:
if curr:
ans.append(curr.val)
stack.append(curr)
curr = curr.left
else:
curr = stack.pop()
curr = curr.right
return ans
다음 순서를 반복합니다.
먼저 왼쪽에서 다시 오른쪽 뒤쪽
반복 구현:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ans = []
def recurse(root):
if root:
recurse(root.left)
recurse(root.right)
ans.append(root.val)
recurse(root)
return ans
순환 실현:
뒤의 순서가 좌우 중간이기 때문에 우리는 그것을 거꾸로 하면 뒤의 순서가 중우 왼쪽으로 바뀌고 다시 역순으로 변한다.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
ans = []
curr = root
while stack or curr:
if curr:
ans.append(curr.val)
stack.append(curr)
curr = curr.right
else:
curr = stack.pop()
curr = curr.left
return ans[::-1]
계층 이동:
층차적 훑어보기도 폭 우선 훑어보기라고 할 수 있다. 먼저 나무의 1층 결점을 방문하고, 다시 나무의 2층 결점을 방문한다...그리고 맨 아래 결점까지 계속 방문합니다.같은 층 결점에서 왼쪽에서 오른쪽으로 순서대로 접근합니다.
두 갈래 나무의 층별 출력은 위에서 아래로, 왼쪽에서 오른쪽으로 순서대로 나무의 노드를 인쇄한다.층마다 줄을 출력합니다.
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
ans = []
queue = [root]
if not root:
return []
while queue:
temp = []
i = 0
numQueue = len(queue) #
while i < numQueue: #
curr = queue.pop(0)
temp.append(curr.val)
if curr.left:
queue.append(curr.left)
if curr.right:
queue.append(curr.right)
i += 1
ans.append(temp)
return ans
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.