zoukankan      html  css  js  c++  java
  • 【初级算法:树】

    二叉树的深度,递归求

     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     
    13     int maxDepth(TreeNode* root) {
    14         int depth=0,high=0;
    15         dfs(root,depth,high);
    16         return depth;
    17     }
    18     void dfs(TreeNode* root,int &depth,int high){
    19         if(root==NULL) return;
    20         high++;
    21         if(high>depth) depth=high;
    22         dfs(root->left,depth,high);
    23         dfs(root->right,depth,high);
    24         high--;
    25     }
    26 };

    二叉搜索树的判断:

     1 class Solution {
     2 public:
     3     bool isValidBST(TreeNode* root) {
     4         bool res=true;
     5         vector<int> vals;
     6         dfs(root,vals);
     7         for(int i=1;i<vals.size();i++){
     8             if(vals[i-1]>=vals[i]){
     9                 res=false;break;
    10             }
    11         }
    12         return res;
    13     }
    14     void dfs(TreeNode* root,vector<int> &vals){
    15         if(root==NULL) return;
    16         dfs(root->left,vals);
    17         vals.push_back(root->val);
    18         dfs(root->right,vals);
    19     }
    20 };

    对称二叉树:

     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     bool isSymmetric(TreeNode* root) {
    13         bool res=true;
    14         vector<int> vals;
    15         dfs(root,vals);
    16         int i=0;int j=vals.size()-1;
    17         while(i<j){
    18             if(vals[i]!=vals[j]){
    19                 res=false;break;
    20             }
    21             i++;j--;
    22         }
    23         return res;
    24     }
    25     void dfs(TreeNode* root,vector<int> &vals){
    26         if(root==NULL) return;
    27         dfs(root->left,vals);
    28         vals.push_back(root->val);
    29         dfs(root->right,vals);
    30     }
    31 };

    二叉树层次遍历:

     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     vector<vector<int>> levelOrder(TreeNode* root) {
    13         vector<vector<int>> res;
    14         if (root==NULL) return res;
    15         queue<TreeNode*> q;
    16         q.push(root);
    17         while(!q.empty()){
    18             vector<int> level;
    19             int len=q.size();
    20             for(int i=0;i<len;i++){
    21                 TreeNode *front=q.front();
    22                 level.push_back(front->val);
    23                 q.pop();
    24                 if(front->left) q.push(front->left);
    25                 if(front->right) q.push(front->right);
    26             }
    27             res.push_back(level);
    28         }
    29         return res;
    30     }
    31 };
  • 相关阅读:
    03.移除相同的元素
    02.计算数组元素之和
    01-找出元素在数组中的位置
    node.js中Content-Type的设置
    node.js接受form表单数据
    node.js创建服务器
    mongoDB笔记
    TDK三大标签SEO(搜索引擎优化)优化
    引入网页图标
    JavaScript实现二叉搜索树
  • 原文地址:https://www.cnblogs.com/joelwang/p/10503737.html
Copyright © 2011-2022 走看看