非递归遍历
前序遍历
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
中序遍历
后序遍历
层序遍历
递归遍历
递归遍历的规律:无论何时push_back的都是当前的跟结点,遇到左右结点,都是继续递归遍历。
前序遍历
1 class Solution { 2 public: 3 vector<int> preorderTraversal(TreeNode* root) { 4 vector<int> res; 5 preorderTraversalCore( root, res); 6 return res; 7 } 8 9 void preorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 res.push_back(root->val); 13 preorderTraversalCore( root->left, res); 14 preorderTraversalCore( root->right, res); 15 return; 16 } 17 };
中序遍历
1 class Solution { 2 public: 3 vector<int> inorderTraversal(TreeNode* root) { 4 vector<int> res; 5 inorderTraversalCore( root, res); 6 return res; 7 } 8 9 void inorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 inorderTraversalCore( root->left, res); 13 res.push_back(root->val); 14 inorderTraversalCore( root->right, res); 15 return; 16 } 17 18 };
后序遍历
1 class Solution { 2 public: 3 vector<int> postorderTraversal(TreeNode* root) { 4 vector<int> res; 5 postorderTraversalCore( root, res); 6 return res; 7 } 8 9 void postorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 postorderTraversalCore( root->left, res); 13 postorderTraversalCore( root->right, res); 14 res.push_back(root->val); 15 return; 16 } 17 18 };