二叉树前序遍历 挑战:迭代解题
递归简单
迭代思路:见下方代码前
1 / \ 2 3 / \ / \ 4 5 6 71.根节点入栈 2.取出节点,值加入结果,然后先加右,后加左。 3.重复2
注意:就算节点没有孩子,其指向孩子的指针(node.left)是None,不会报错
但是如果取值node.left.val,则会报错。所以最好是像要判断一下if node.left/right,因为这样栈中就不会有None,多浪费了时间。
while stack: node = stack.pop() if node: ret.append(node.val) stack.append(node.right) stack.append(node.left) <precompiled.treenode.TreeNode object at 0x7f19ec21fc90> None None class Solution(object): def preorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ ret = [] stack = [root] while stack: node = stack.pop() if node: ret.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return ret