给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]
迭代法:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> vec; if(root != NULL){ stack<TreeNode*> stk; TreeNode *node = root; stk.push(node); while(!stk.empty()){ node = stk.top(); stk.pop(); if(node->right != NULL) stk.push(node->right); if(node->left != NULL) stk.push(node->left); vec.emplace_back(node->val); } } return vec; } };
递归法:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> preorderTraversal(TreeNode* root) { vector<int> vec; if(root != NULL){ DLR(root, vec); } return vec; } void DLR(TreeNode* root, vector<int>& vec){ // vector<int> vec = *vecPtr; vec.push_back(root->val); if(root->left != NULL){ DLR(root->left, vec); } if(root->right != NULL){ DLR(root->right, vec); } return; } };
迭代法思路:
因为是前序遍历,所以输出的时候应该是中-左-右,所以压栈的时候要先压右,再压左。