acwing 70-72 剑指OFFER 二叉树相关

Posted itdef

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于acwing 70-72 剑指OFFER 二叉树相关的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer打卡day42—— Acwing 62. 丑数

剑指Offer打卡day42——AcWing 77. 翻转单词顺序

剑指Offer打卡day42—— ACWing 81. 扑克牌的顺子

剑指Offer打卡43——AcWing 85. 不用加减乘除做加法

剑指Offer打卡day43—— Acwing 86. 构建乘积数组

剑指Offer打卡day43—— ACWing 88. 树中两个结点的最低公共祖先