LeetCode 144题 Binary Tree Preorder Traversal

1、读题,题目是二叉树的Preorder Traversal (先序遍历),如果是递归几行代码就可以解决。题目建议用循环去解决。(Follow up:Recursive solution is trivial, could you do it iteratively?)
2、dfs 遍历都是用栈,利用栈的后进先出的特性,这个题目关键点,要先添加右子树,再添加左子树。
3、看黄哥Python、Go、Java 三种语言写的代码。
Python 代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# 黄哥Python培训 黄哥所写
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if root is None:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
if node:
res.append(node.val)
if node.right is not None:
stack.append(node.right)
if node.left is not None:
stack.append(node.left)
return resGo 代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
// 黄哥Python培训 黄哥所写
func preorderTraversal(root *TreeNode) []int {
var res []int
if root == nil {
return res
}
stack := []*TreeNode{root}
for len(stack) > 0 {
node := stack[len(stack) - 1]
stack = stack[0: len(stack) - 1]
if node != nil {
res = append(res, node.Val)
}
if node.Right != nil {
stack = append(stack, node.Right)
}
if node.Left != nil {
stack = append(stack, node.Left)
}
}
return res
}Java 代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.Stack;
// 黄哥Python培训 黄哥所写
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) {
return res;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (stack.size() > 0) {
TreeNode node = stack.pop();
if (node != null) {
res.add(node.val);
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
return res;
}
}
黄哥:黄哥Python培训是这样训练学员的zhuanlan.zhihu.com
请看
