zoukankan      html  css  js  c++  java
  • acwing 70-72 剑指OFFER 二叉树相关

    地址

    https://www.acwing.com/problem/content/66/

    https://www.acwing.com/problem/content/67/

    https://www.acwing.com/problem/content/submission/68/

    三道题都是二叉树相关 使用递归遍历即可解决

    70. 二叉搜索树的第k个结点

    给定一棵二叉搜索树,请找出其中的第k小的结点。

    你可以假设树和k都存在,并且1≤k≤树的总结点数。

    输入

    输入:root = [2, 1, 3, null, null, null, null] ,k = 3
    
        2
       / 
      1   3
    
    输出:3

    中序遍历 额外添加了计数K

    当遍历了K个节点 就找到了目标节点

     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* ans;
    13     TreeNode* travel(TreeNode* root, int& k)
    14     {
    15         if(root == NULL) return NULL;
    16         
    17         travel(root->left,k);
    18         k--;
    19         if(k ==0) ans = root;
    20         
    21         travel(root->right,k);
    22         
    23         
    24         return NULL;
    25     }
    26     
    27     TreeNode* kthNode(TreeNode* root, int k) {
    28          travel(root,k); 
    29          
    30          return ans;
    31     }
    32 };
    View Code

    71. 二叉树的深度

    输入一棵二叉树的根结点,求该树的深度。

    从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

    输入

    输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示:
        8
       / 
      12  2
         / 
        6   4
    
    输出:3

    递归遍历 添加层数遍历

     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 int ans =0;
    13     
    14     void travel(TreeNode* root,int k){
    15         if(root == NULL){
    16             if(k > ans)
    17                 ans =k;
    18             return;
    19         }
    20         travel(root->right,k+1);
    21         travel(root->left,k+1);
    22         
    23     }
    24 
    25     int treeDepth(TreeNode* root) {
    26         if(root == NULL) return 0;
    27         travel(root,0);
    28         
    29         
    30         return ans;
    31     }
    32 };
    View Code

    72. 平衡二叉树

    输入一棵二叉树的根结点,判断该树是不是平衡二叉树。

    如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

    注意:

    • 规定空树也是一棵平衡二叉树。

    输入

    输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示,
        5
       / 
      7  11
        /  
       12   9
    
    输出:true

    递归遍历 记录每个节点作为子树的深度 向上返回左右子树大的那个深度

     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 ans =true;
    13     int isBalancedInner(TreeNode* root,int k)
    14     {
    15         if(root == NULL) return k;
    16         
    17         int l = isBalancedInner(root->left,k+1);
    18         int r = isBalancedInner(root->right,k+1);
    19         
    20         if(abs(l-r) > 1) ans =false;
    21         
    22         return max(l,r);
    23     }
    24 
    25     bool isBalanced(TreeNode* root) {
    26         isBalancedInner(root,0);
    27         
    28         return ans;
    29     }
    30 };
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    用一个变量表示 ----------"序号,名称,价格"
    11.3 字典复习
    python闭包使用
    Selenium with Python使用心得
    laravel队列使用
    display:inline-block笔记
    python mysql设置当前连接默认的字符集
    lavavel门面(facade)分析
    系统软件漏洞修复最佳实践
    记一次浮点数比较
  • 原文地址:https://www.cnblogs.com/itdef/p/11525063.html
Copyright © 2011-2022 走看看