先中序遍历获得数组,然后遍历数组得到结果
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 int getMinimumDifference(TreeNode* root) { 15 vector<int> vec; 16 ldf(root,vec); 17 int result = INT_MAX; 18 for(int i = 1; i < vec.size(); i++){ 19 result = min(result, abs(vec[i]-vec[i-1])); 20 } 21 return result; 22 } 23 private: 24 void ldf(TreeNode* root, vector<int>& vec){ 25 if(root == nullptr) return; 26 ldf(root->left, vec); 27 vec.push_back(root->val); 28 ldf(root->right,vec); 29 } 30 };
中序遍历,记录前一个节点,然后记录次数,并比较
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 int max_count = 0; 15 int count = 0; 16 TreeNode* pre; 17 vector<int> result; 18 vector<int> findMode(TreeNode* root) { 19 ldr(root); 20 return result; 21 } 22 private: 23 void ldr(TreeNode* root){ 24 if(root == nullptr) return; 25 ldr(root->left); 26 27 if(pre == nullptr){ // 第一个. 28 count = 1; 29 }else if(root->val == pre->val){// 与前一个节点相同 30 count++; 31 }else{ 32 count = 1; 33 } 34 35 pre = root; 36 if(count == max_count) result.push_back(root->val); 37 else if(count > max_count){ 38 max_count = count; 39 result.clear(); 40 result.push_back(root->val); 41 } 42 ldr(root->right); 43 } 44 };
其实就是后序遍历
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { 13 if(root == p) return root; 14 if(root == q) return root; 15 if(root == nullptr) return nullptr; 16 TreeNode* left = lowestCommonAncestor(root->left, p, q); 17 TreeNode* right = lowestCommonAncestor(root->right, p, q); 18 if(left != nullptr && right != nullptr) return root; 19 if(left == nullptr) return right; 20 return left; 21 } 22 };
浙公网安备 33010602011771号