public List preorderTraversal(TreeNode root) {
// 保存树值的集合
List list = new ArrayList<>();
// 用栈保存遍历的树的节点
Stack stack = new Stack<>();
while (root!=null || !list.isEmpty()){
// 遍历树的左子树
while (root!=null){
list.add(root.val);
stack.push(root);
// 将左子树赋值给根节点
root=root.left;
}
if(stack.isEmpty()){
break;
}
// 取出栈的节点
root = stack.pop();
// 将栈取出的节点赋值给根节点
root=root.right;
}
return list;
}