解题思路:
递归
按照前序遍历的定义来遍历
中 -> 左 -> 右
将值存储进数组就行了
迭代
因为要实现
中 -> 左 -> 右
右是最后遍历的,所以是先进后出(FILO)栈,先将根节点存进栈,然后每次取出栈顶,然后将右节点和左节点先后压入栈中
代码
Python
递归
1 2 3 4 5 6 7 8 9 10 11
| class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: def dfs(node, lis) -> None: if node == None: return lis.append(node.val) dfs(node.left, lis) dfs(node.right, lis) result = [] dfs(root, result) return result
|
迭代
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] stack = [] stack.append(root) if root == None: return result while stack: node = stack.pop() result.append(node.val) stack.append(node.right) if node.right else ... stack.append(node.left) if node.left else ... return result
|
C++
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> tree_val; dfs(root, tree_val); return tree_val; } void dfs(TreeNode* node, vector<int> &tree_val) { if (node == NULL) return; tree_val.push_back(node->val); dfs(node->left, tree_val); dfs(node->right, tree_val); } };
|
迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public: vector<int> preorderTraversal(TreeNode* root) { stack<TreeNode*> st; vector<int>tree_val; if (root == NULL) return tree_val; st.push(root); while (!st.empty()) { TreeNode* node = st.top(); st.pop(); tree_val.push_back(node->val); if (node->right) st.push(node->right); if (node->left) st.push(node->left); } return tree_val; } };
|