嗨(*´゚∀゚`)ノ ,我们又见面啦,这一篇我们来继续看一下二叉树,进行选择题和编程题的练习,进行更好的巩固和了解,让我们来更好的了解它吧!
若i>0,i位置结点的双亲序号:(i-1)/2;i=0为根结点编号,无双亲结点。 若2i+1 < n,左孩子序号:2i+1;2i+1 ≥ n则无左孩子。 若2i+2 < n,右孩子序号:2i+2;2i+2 ≥ n则无右孩子。
证明:

3.这个性质比较重要 证明: 设度为0,1,2的分别用n0,n1,n2来表示

我们可以发现,初始n0=1; 每增加一个n1,n0先减少再增加相当于不变 每增加一个n2,n0就增加1个 所以n0永远比n2大1、 所以n0=n2+1;


解析 利用n0=n2+1;n2=199,则n0=200;n1=399-n0-n2=0; 为满二叉树 选B

答案:A
解析:

答案:A 解析 2n=n0+n1+n2, 因为是完全二叉树,节点为偶数,所以度为1的节点为1,即n1=1; 则2n=n0+(n0-1)+1,所以n0=n;选A;

答案:B 解析:
h=log(n+1),带入9<h<10,因为这是满二叉树的公式,所以实际高度为10,最后一层没满

答案:B 解析 完全二叉树,节点为奇数,所以n1=0; 767=n0+n1+n2=n0+0+n0-1; n0=384

答案:A 解析: 转换为树如下图

前序遍历:根->左节点->右节点 可得前序序列遍历为ABDHECFG

答案:A 由先序规则得

答案:D 用前序遍历确定根,再利用中序将树展现出来

再根据图进行前序遍历 选D

答案:A 因为前序与中序结果相同,所以该二叉树只有左树,如图

所以层序遍历选A
链接:单值二叉树

解题 解题链接 图片解题

代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isUnivalTree(struct TreeNode* root)
{
if(root==NULL)
{
return true;
}
if(root->left!=NULL&&root->left->val!=root->val)
return false;
if(root->right!=NULL&&root->right->val!=root->val)
return false;
return isUnivalTree(root->left)&&isUnivalTree(root->right);
}链接:相同的树

解题链接:解题链接 图片显示

代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if(p == NULL && q == NULL)
{
return true;
}
if(p == NULL || q == NULL)
{
return false;
}
if(p->val != q->val)
{
return false;
}
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}题目链接:对称二叉树

解题链接:解题链接 图片

代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* a,struct TreeNode* b)
{
if(a==NULL&&b==NULL)
{
return true;
}
if(a==NULL||b==NULL)
{
return false;
}
if(a->val!=b->val)
{
return false;
}
return isSameTree(a->left,b->right)&&isSameTree(a->right,b->left);
}
bool isSymmetric(struct TreeNode* root)
{
return isSameTree(root->left,root->right);
}
作者:星轨初途
链接:https://leetcode.cn/problems/symmetric-tree/solutions/3837280/jian-dan-dui-cheng-er-cha-shu-by-flamboy-e5ei/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。题目链接:二叉树的前序遍历

解答:解题链接 图片解题

代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
// 作用:统计二叉树的节点总个数
int BinarTreeSize(struct TreeNode* a)
{
if(a==NULL)
{
return 0;
}
return BinarTreeSize(a->left)+BinarTreeSize(a->right)+1;
}
// 作用:递归实现二叉树的前序遍历,并将节点值存入数组中
void preOrder(struct TreeNode* root,int *arr,int *i)
{
if(root==NULL)
{
return ;
}
arr[(*i)++]=root->val;
preOrder(root->left,arr,i);
preOrder(root->right,arr,i);
}
// 作用:主函数,完成二叉树前序遍历结果的数组封装(分配内存+执行遍历)
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize = BinarTreeSize(root);
int* arr = (int*)malloc(sizeof(int)*(*returnSize));
//前序遍历
int i = 0;
preOrder(root,arr,&i);
return arr;
}
作者:星轨初途
链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/solutions/3837311/er-cha-shu-de-qian-xu-bian-li-ti-jie-by-k9mzh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。链接: 二叉树中序遍历
链接:二叉树的后序遍历 这两道题与第4题基本一样,大家可以先尝试一下 解题:二叉树中序遍历 二叉树的后序遍历 题目


题目链接:另一颗树的子树

解题:解题链接 图片解题

代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
// 判断两棵树是否完全相同(节点值和结构都一致)
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if(p == NULL && q == NULL)
{
return true; // 两棵树都为空,视为相同
}
if(p == NULL || q == NULL)
{
return false; // 一棵空一棵非空,视为不同
}
if(p->val != q->val)
{
return false; // 节点值不同,视为不同
}
// 递归判断左右子树是否都相同
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
if(root == NULL)
{
return false; // 主树为空时,无法包含任何子树(除非subRoot也为空,本题默认subRoot为有效子树)
}
if(isSameTree(root,subRoot))
{
return true; // 当前主树节点与子树完全相同,直接返回true
}
// 递归判断子树是否是左子树的子树,或是否是右子树的子树(只要其一满足即可)
return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}
作者:星轨初途
链接:https://leetcode.cn/problems/subtree-of-another-tree/solutions/3837255/ling-yi-ke-shu-de-zi-shu-ti-jie-by-flamb-onx7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本篇到这里就结束啦٩(๑>◡<๑)۶ ,也就是我们对二叉树的学习已经正式结束啦,相信大家都有所收获,下一篇我们就要开始对排序的学习啦!期待与大家共同进步!让我们期待吧!ヾ(@▽@)ノ