小黑递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
display = []
def pre_root(node):
if node:
display.append(node.val)
pre_root(node.left)
pre_root(node.right)
pre_root(root)
return display
小黑非递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
q = [root]
display = []
while q:
top = q.pop()
display.append(top.val)
if top.right:
q.append(top.right)
if top.left:
q.append(top.left)
return display
迭代法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
q = []
node = root
display = []
while node or q:
while node:
q.append(node)
display.append(node.val)
node = node.left
top = q.pop()
node = top.right
return display
迭代法(java)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> display = new ArrayList<Integer>();
Deque<TreeNode> q = new LinkedList<TreeNode>();
TreeNode node = root;
while(node != null || !q.isEmpty()){
while(node != null){
q.push(node);
display.add(node.val);
node = node.left;
}
node = q.pop().right;
}
return display;
}
}
Mirrors
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 输出列表
display = []
p1 = root
# 对p1进行遍历
while p1:
p2 = p1.left
# 寻找左孩子最右结点p2
if p2:
while p2.right and p2.right != p1:
p2 = p2.right
if p2.right:
p2.right = None
p1 = p1.right
else:
p2.right = p1
display.append(p1.val)
p1 = p1.left
# 没有左孩子直接打印,p1赋给右孩子
else:
display.append(p1.val)
p1 = p1.right
return display
Mirrors(java)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
TreeNode p1 = root;
List<Integer> display = new ArrayList<Integer>();
while(p1 != null){
TreeNode p2 = p1.left;
if(p2 != null){
while(p2.right != null && p2.right != p1){
p2 = p2.right;
}
if(p2.right != null){
p2.right = null;
p1 = p1.right;
}else{
display.add(p1.val);
p2.right = p1;
p1 = p1.left;
}
}else{
display.add(p1.val);
p1 = p1.right;
}
}
return display;
}
}
小黑生活
just run喜茶放松跑
和小黑驴喝吐在路旁
和师弟一起去吃鸡按摩