赞
踩
深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。
在⼆叉树中,常⻅的深度优先遍历为:前序遍历、中序遍历以及后序遍历。
三种遍历方式的最大区别是:处理根节点的时机不同。
- //后序遍历
- class Solution {
- public:
- bool evaluateTree(TreeNode* root) {
- if(root->left == nullptr) return root->val;
- bool l = evaluateTree(root->left);
- bool r = evaluateTree(root->right);
- if(root->val == 2) return l | r;
- else return l & r;
- }
- };
- class Solution {
- public:
- int dfs(TreeNode* root,int presum)
- {
- presum = presum*10+root->val;
-
- if(root->left == nullptr && root->right == nullptr) return presum;
- int ret = 0;
-
- if(root->left) ret += dfs(root->left,presum);
- if(root->right) ret += dfs(root->right,presum);
- return ret;
- }
- int sumNumbers(TreeNode* root) {
- return dfs(root,0);
- }
- };
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- TreeNode* pruneTree(TreeNode* root) {
- if(root==nullptr) return nullptr;
-
- root->left = pruneTree(root->left);
- root->right = pruneTree(root->right);
-
- if(root->left == nullptr && root->right == nullptr && root->val == 0)
- {
- delete root;
- root = nullptr;
- }
-
- return root;
- }
- };
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- long prev = LONG_MIN;
-
- bool isValidBST(TreeNode* root) {
- if(root == nullptr) return true;
-
- bool left = isValidBST(root->left);
- if(left == false) return false;
- bool cur = false;
- if(root->val > prev)
- {
- cur = true;
- }
- if(cur == false) return false;
- prev = root->val;
-
- bool right = isValidBST(root->right);
-
- return left && right && cur;
- }
- };
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- int count;
- int ret;
- int kthSmallest(TreeNode* root, int k) {
- count = k;
- dfs(root);
- return ret;
- }
- void dfs(TreeNode* root)
- {
- if(root == nullptr || count == 0)
- return;
- dfs(root->left);
- count--;
- if(count == 0) ret = root->val;
- dfs(root->right);
- }
- };
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- public:
- vector<string> ret;
-
- vector<string> binaryTreePaths(TreeNode* root) {
- string path;
- dfs(root,path);
- return ret;
- }
- void dfs(TreeNode* root,string path)
- {
- path += to_string(root->val);
- if(root->left == nullptr && root->right == nullptr)
- {
- ret.push_back(path);
- return;
- }
- path += "->";
- if(root->left) dfs(root->left,path);
- if(root->right) dfs(root->right,path);
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。