作业五 二叉树II
来源:互联网 发布:c语言将大写转换为小写 编辑:程序博客网 时间:2024/06/05 21:50
这一块的题目难度普遍较大,题目也比较经典,做不来的时候可以百度搜索思路,然后自己代码实现
2322 二叉树的创建 III
这题可以用递归来做,代码实现不复杂,重点在于对先序和递归的理解。
附上代码:
BTree creat(){//ABD...C..BTree p = (BTree)malloc(sizeof(BTNode));char tmp;cin >> tmp;if (isalpha(tmp)){p->data = tmp;p->lchild = creat();p->rchild = creat();}else p = NULL;return p;}
2323 2324 叶节点和叶节点数遍历一下就行了,不具体展开
2325 二叉树的树深
举例:上面ABCD那棵树的树深是3(空节点是不算的),树深需要比较左子树和右子树,取两边更大的一个。
这题可以用分治的思想,把问题一步步缩小,比如求二叉树T的树深h,就相当于max(T->lchild.h+1,T->rchild.h+1),而T的左子树又可以继续往下分成左子树的左子树和左子树的右子树 ,即T->lchild.h=max(T->lchild->lchild.h+1,T->lchild->rchild.h+1)。然后一步步往下走,直到叶子节点。到来叶子节点左右孩子都是空了怎么办?返回1咯,最后一步步反哺,T.h就出来了。
int GetDepth(BTree root){if (!root) return 0;int i = 0, j = 0;if (root->lchild)i = GetDepth(root->lchild);if (root->rchild)j = GetDepth(root->rchild);return i > j ? i + 1 : j + 1;}
2328 二叉树带节点数输出
水题,输出的时候判断一下是不是空就行了
插句题外话:先中后序遍历刚开始会搞不清,实际上只要知道先中后都是相对于 根节点 就不会弄混了。 先序就是根节点第一个遍历,中序就是根节点第二个遍历,后序就是根节点第三个遍历。确定了根节点,剩下俩个的顺序都是先左后右。(特殊情况下会先右后左,比如下面这道)
2329 二叉树的竖向输出
问题1.输出要从最右边开始,然后依次向左移动输出
问题2.要记录树深
在之前做遍历输出的时候应该可以发现,中序和后序都会先输出最左边的节点。所以我们在这里做一个变通,把遍历的顺序改为右中左(逆中序),你会发现输出顺序完美符合需求(*^▽^*)
树深可以用之前写过的函数,在遍历输出之前先记录树深;也可以在递归的时候直接记录并输出
void PrintTree(BTree bt, int nLayer){if (!bt ) return;PrintTree(bt->rchild, nLayer + 1);for (int i = 0; i<nLayer; i++)printf("-");printf("%c\n", bt->data);PrintTree(bt->lchild, nLayer + 1);}
一行行输出,用层序遍历,这是首先想到的
因为要打‘-’号,所以需要从左往右确认是第几个,接着到了最后一个要换行
而且当一行有多个点时,个个点之间‘-’的数量为相减
问题1.怎么确认是从左往右数的第N个
问题2.怎么分辨该节点在第几行
问题3.当一行有多个输出时,怎么确认还要打几个‘-’号解决1:左中右 中序遍历一次,给每个节点定位
解决2:可以遍历一次确定各节点深度;也可以在队里直接数个数(例如当第N行遍历之后,一共新加入了X个节点,下一行每pop()一个节点,X--,X==0时换行)
解决3:用tmp临时节点记录上一个节点,中间‘-’的个数为 now.n-tmp.n
2331 二叉树确定
具体看链接 http://blog.csdn.net/qq_38449464/article/details/78674855
简单讲,先序提供根节点的信息,中序提供所有节点的排序信息,结合两者确定二叉树。
如果题目给的是后序和中序,那么就从后序的最右边开始遍历(因为后序的最后一个是根节点,和先序是反的)
如果题目只给先序和后序,无法确定二叉树。
- 作业五 二叉树II
- 五:二叉树输出
- 实验五 二叉树
- 数据结构OJ作业 二叉树
- 二叉树层次遍历II
- 五、 作业
- 五:作业
- 作业五
- 作业五
- 作业五
- 作业五
- 作业五
- 二叉查找树(五)
- 二叉树整理(五)
- 数据结构学习五:二叉树
- 【数据结构实验五】二叉树
- python(五)二叉树
- 二叉树(上机作业版)
- Vijos 雷曼兔(csapc)
- 【算法】一种用于云计算的SPSO算法
- android killer连接夜神模拟器
- 文章标题
- C/C++学习笔记
- 作业五 二叉树II
- 【配置】使用nginx反向代理加密websocket (wss)
- win 8088端口被占用解决方式及延伸
- Android隐藏系统底部工具栏(Navigation bar)
- 面试中遇到的算法题(最长回文子串的长度)
- Redis分布式锁----乐观锁的实现,以秒杀系统为例
- NYOJ 背包问题
- Hog,SIFT以及LBP这三种特征有什么不同
- Redis学习-4:Java操作Redis-Jedis