https://www.cnblogs.com/kangjianwei101/p/5243404.html

目录

36-47 二叉树

6.3,6.5,6.6,6.10,6.13,6.14,6.19,6.20,6.21,6.23,6.24,6.26,6.27, 6.28,6.29,6.30,6.36,6.41,6.42,6.43,6.47,6.49,6.56,6.60,6.62,6.65,6.69


3


5

6

10 ??


(1)显然该二叉树为正则二叉树,没有度为1的结点,只有度为0的叶子和度为2的分支
按二叉树性质n0 = n2 + 1,因此度为2结点数为n - 1
于是该二叉树有2n-1个结点![v![](https://img-blog.csdnimg.cn/20210416100342295.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbjI5Xw==,size_16,color_FFFFFF,t_70)

13,14

19 树->二叉树

20 森林->二叉树 线索化



方法:https://jingyan.baidu.com/article/19020a0a743851529d28421a.html
https://jingyan.baidu.com/article/cd4c2979abd74f346e6e60ed.html
树变成二叉树:从树的根结点开始,从上到下,看每一个结点,把你正在看的结点的孩子放在左子树,兄弟放在右子树。
将一个森林转换为二叉树:
将森林中的每棵树变为二叉树;2.因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。

21 二叉树->森林


23

知中后求前:https://blog.csdn.net/WIFIfw/article/details/105312581
二叉树的先根序列与等价树的先根序列相同,二叉树的中序序列对应着树的后根序列。

24


26



27 序列画树

28

29


30

36


#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;int BiTreeEmpty(BiTree T)//判断树是否为空
{return T == NULL ? 1 : 0;
}int IsSimilar(BiTree t1, BiTree t2)
{if (BiTreeEmpty(t1) && BiTreeEmpty(t2))//如果两个树都是空return 1;else//非空{if (!BiTreeEmpty(t1) && !BiTreeEmpty(t2)){if (IsSimilar(t1->lchild, t2->lchild) && IsSimilar(t1->rchild, t2->rchild))return 1;}}return 0;
}

41

想知道*和&的差别:https://blog.csdn.net/weixin_43961780/article/details/106364838
编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值。

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;int PONodeK(BiTree T, int k, TElemType& e, int& i)//k是题目要求的第k个位置;i是用来计时;e存放节点的返回值
{if (T){i++;if (i == k)//找到该位置e == T->data;else{PONodeK(T->lchild, k, e, i);PONodeK(T->rchild, k, e, i);}}return 1;
}

42

编写递归算法,计算二叉树中叶子结点的数目。

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;int POLeafNodeNum(int& i, BiTree T)
{if (T){if (!T->lchild && !T->rchild)i++;POLeafNodeNum(i, T->lchild);POLeafNodeNum(i, T->rchild);}return 1;
}
typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode, * BiTree;
int sum_42(BiTree T)
{int num = 0;if (T){if (!T->lchild && !T->rchild)num++;else{num += sum_42(T->lchild);num += sum_42(T->rchild);}}return num;
}

43

编写递归算法,将二叉树中所有结点的左、右子树相互交换。

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;int ExchangeBiTree(BiTree T)
{BiTree t;if (T){t = T->lchild;T->lchild = T->rchild;T->rchild = t;ExchangeBiTree(T->lchild);ExchangeBiTree(T->rchild);}return 1;
}

47

编写按层次顺序(同一层自左至右)遍历二叉树的算法。
https://blog.csdn.net/lusic01/article/details/79819014
用队列的没有搞懂

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;void LevelorderTraversal(BiTree T)
{int i, j;BiTree p[100];//树指针数组来模拟队列i = j = 0;//i指层,j指p的顺序下标if (T)p[j++] = T;while (i < j){printf("%c", p[i]->data);if (p[i]->lchild)p[j++] = p[i]->lchild;if (p[i]->rchild)p[j++] = p[i]->rchild;i++;}
}

49 完全二叉树

编写算法判别给定二叉树是否为完全二叉树。
其他:https://blog.csdn.net/Lhj0616/article/details/78785439

#include <stdio.h>
#include <stdlib.h>typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode,*BiTree;int BiTreeDepth(BiTree T)//求树的深度
{int LD, RD;if (T == NULL)return 0;else{LD = BiTreeDepth(T->lchild);RD = BiTreeDepth(T->rchild);return (LD >= RD ? LD : RD) + 1;}
}int CompleteBiTree(BiTree& T)//用完全二叉树的性质
{int d;if (T){d = BiTreeDepth(T->lchild) - BiTreeDepth(T->rchild);if (d < 0 || d>1)//左右子树的深度差值只能取0,1return 0;else{if (CompleteBiTree(T->lchild) && CompleteBiTree(T->rchild))return 1;elsereturn 0;}}else return 1;
}

56 ?? 线索二叉树

Threaded BinaryTree线索二叉树
线索二叉树:https://blog.csdn.net/S_999999/article/details/86157532?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162029043216780255224783%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162029043216780255224783&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-86157532.first_rank_v2_pc_rank_v29&utm_term=%E7%BA%BF%E7%B4%A2%E4%BA%8C%E5%8F%89%E6%A0%91
图解线索二叉树: https://blog.csdn.net/weixin_44067399/article/details/107179420?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162029043216780255224783%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162029043216780255224783&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-107179420.first_rank_v2_pc_rank_v29&utm_term=%E7%BA%BF%E7%B4%A2%E4%BA%8C%E5%8F%89%E6%A0%91

试写一个算法,在先序后继线索二叉树中,查找给定结点*p在先序序列中的后继(假设二叉树的根结点未知)。并讨论实现此算法对存储结构有何要求?


typedef int TElemType;
typedef enum PointerTag{Link,Thread};//Link==0,指针;Thread==1,线索
typedef struct BiThrNode
{TElemType data;struct BiThrNode* lchild, * rchild;PointerTag LTag, RTag;//左右标志
}BiThrNode, *BiThrTree;
//由先序遍历创建先序线索化链表
int PreThreading(BiThrTree& T, BiThrTree& pre)
{if (T){if (!T->lchild){T->LTag = Thread;T->lchild = pre;}if (pre && !pre->rchild){pre->RTag = Thread;pre->rchild = T;}pre = T;if (T->LTag == Link)PreThreading(T->lchild, pre);if (T->RTag == Link)PreThreading(T->rchild, pre);}return 1;
}int PreOderThreading(BiThrTree& TT, BiThrTree T)
{//先序遍历二叉树T,并将其先序线索化,TT指向头节点BiThrTree pre;if (!(TT = (BiThrTree)malloc(sizeof(BiThrNode))))return 0;TT->LTag = Thread;TT->RTag = Link;TT->lchild = TT;//左子树回指if (!T)TT->rchild = TT;//若二叉树为空,右子树回指else{TT->rchild = T;pre = TT;PreThreading(T, pre);//先序遍历进行先序线索化pre->rchild = T;//最后一个结点线索化pre->RTag = Thread;TT->lchild = pre;}return 0;
}//从二叉线索树上任一结点q开始查找结点*p。如果找到,将*p的后继结点指针存于q中,返回1; 否则返回0
int Find(BiThrTree& q, TElemType* p)
{BiThrTree pt = q;if (!pt)return 0;if (pt->data == *p){if (pt->LTag == Link)q = pt->lchild;elseq = pt->rchild;return 1;}pt = q->rchild;while (pt != q && pt->data != *p){if (pt->LTag == Link)pt = pt->lchild;elsept = pt->rchild;}if (pt == q)return 0;if (pt->data == *p){if (pt->LTag == Link)q = pt->lchild;elseq = pt->rchild;}return 0;
}

60 孩子-兄弟

孩子-兄弟链:https://blog.csdn.net/Feynman1999/article/details/72771432/
试编写算法,对一棵以孩子-兄弟链表表示的树统计叶子的个数。

#include <stdio.h>
#include <stdlib.h>typedef struct CSNode
{ElemType data;struct CSNode* firstchild, * nextsibling;
}CSNode,*CSTree;int LeafNum(CSTree& T)
{if (T){if (!T->firstchild)return 1 + LeafNum(T->nextsibling);elsereturn LeafNum(T->firstchild) + LeafNum(T->nextsibling);}elsereturn 0;
}

62

关于孩子兄弟链:https://blog.csdn.net/Feynman1999/article/details/72771432/
对以孩子-兄弟链表表示的树编写计算树的深度的算法。

#include <stdio.h>
#include <stdlib.h>typedef struct CSNode
{ElemType data;struct CSNode* firstchild, * nextsibling;
}CSNode,*CSTree;int Depth(CSTree& T)
{int d1, d2;if (T){d1 = 1 + Depth(T->firstchild);d2 = Depth(T->nextsibling);return d1 > d2 ? d1 : d2;}elsereturn 0;
}

65 ?

已知一棵二叉树的前序序列和中序序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。
https://blog.csdn.net/HUST_LHC/article/details/105259465
https://blog.csdn.net/qq_43661234/article/details/101538803

#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
typedef struct BTNode {elemtype data;struct BTNode* left, * right;
}BTNode, * BiTree;//假设数组AB分别存储前序序列,中序序列
//l1 r1表示A[](先序序列)的最左端和最右端下标;l2,r2同理
BiTree creat(elemtype A[], elemtype B[], int l1, int r1, int l2, int r2)
{BiTree root = (BiTree)malloc(sizeof(BTNode));root->data = A[l1];// printf("%d\n",root->data);int i = l2;for (i = l2; B[i] != A[l1]; i++);  //在中序遍历序列中查找根结点位置int llen = i - l2;  //左子树长度int rlen = r2 - i;    //右子树长度if (llen > 0)root->left = creat(A, B, l1 + 1, l1 + llen, l2, llen + l2 - 1);elseroot->left = NULL;if (rlen > 0)root->right = creat(A, B, r1 - rlen + 1, r1, r2 - rlen + 1, r2);elseroot->right = NULL;return root;
}

、、、

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
int SearchNum(int num,int *array,int length)
{for(int i=0; i<length; i++)if(array[i] == num)return i;return -1;//没有找到。
}struct TreeNode* buildTree(int* pre, int prelen, int* mid, int midlen)
{struct TreeNode* want;want=(struct TreeNode*)malloc(sizeof(struct TreeNode));if(prelen==0&&midlen==0)return NULL;want->val=pre[0];int rootposition=0;if(pre[0]==mid[0])want->left=NULL;else{rootposition=SearchNum(want->val,mid,midlen);want->left=buildTree(pre+1,rootposition,mid,rootposition);}if(pre[0]==mid[midlen-1])want->right=NULL;else{want->right=buildTree(pre+rootposition+1,prelen-rootposition-1,mid+rootposition+1,midlen-rootposition-1);}return want;
}

69



typedef char TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode* lchild, * rchild;
}BiNode, * BiTree;//逆中序遍历
void printfBiTree(BiTree H, int i)//i表示相对根节点走的步数,层序信息
{int j;if (H){printfBiTree(H->rchild, i + 1);//先右for (j = 1; j < 2 * i; j++)//控制孔哥格数printf(" ");printf("%c\n", H->data);printfBiTree(H->lchild, i + 1);//再左}
}

严蔚敏数据结构习题第六章相关推荐

  1. 严蔚敏数据结构习题第九章

    l第九章查找作业题目9.9 9.14 9.19 9.25 9.31 9.33,平台提交入口已开通,截止日期6月20日 https://www.cnblogs.com/kangjianwei101/p/ ...

  2. c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...

    数据结构c语言版严蔚敏清华大学出版社第四章串 模式匹配(定位) 设有主串S和子串T(将S称为目标串,将T称为模式串),在主串S中,从位置start开始查找,如若在主串S中找到一个与子串T相等的子串,则 ...

  3. 严蔚敏数据结构源码及习题解析

    ⭐ 我的网站: www.mengyingjie.com ⭐ 严蔚敏数据结构源码及习题解析 习题解析未更新完整,以后更新 内容已上传到github,欢迎star和fork: https://github ...

  4. 计量经济学第六版计算机答案,伍德里奇计量经济学导论计算机习题第六章第13题c_6.13...

    伍德里奇计量经济学导论计算机习题第六章第13题,答案和MATLAB代码 clear,clc; % c6.13 by % 打开文字文件和数据文件 importdata('meap00_01.des'); ...

  5. KMP算法-严蔚敏数据结构

    KMP 算法是 D.E.Knuth.J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法.该算法相对于 Brute- ...

  6. 广工 AnyviewC 数据结构习题 第四章

    广工 AnyviewC 数据结构习题 第四章 广工 AnyviewC 数据结构习题 第四章 1[题目]已知某哈希表的装载因子小于1,哈希函数H(key) 2[题目]假设哈希表长为m,哈希函数为H(x) ...

  7. 广工 AnyviewC 数据结构习题 第五章

    广工 AnyviewC 数据结构习题 第五章 广工 AnyviewC 数据结构习题 第五章 1[题目]试编写如下定义的递归函数的递归算法: 2[题目]试写出求递归函数F(n)的递归算法: 3[题目]求 ...

  8. 数据结构 习题 第五章 多维数组和广义表 (C语言描述)

    最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧. 1.单选题 稀疏矩阵一般的压缩存储方法有两种,即( D) A. 二维数组和三 ...

  9. 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码

    一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...

最新文章

  1. c语言用getchar函数输入两个字符c1,c语言:用getchar函数读入两个字符给c1,c2,用putchar和printf输出。思考问题...
  2. 【Zookeeper实战】Zookeeper入门到实战看这篇就够了
  3. leetcode算法题--有效的括号
  4. 不使用配置文件动态注册HttpModule
  5. Python 技术篇-用paramiko库实现linux服务器文件下载到winodws本地实例演示
  6. 手脱EZIP v1.0
  7. [导入][转]sap学习手册二
  8. 《剑指offer》面试题42——翻转单词顺序列
  9. 配置VS2008来Debug .Net框架源码
  10. 多视角子空间学习系列之 MCCA (Multi-view CCA) 多视角CCA Horst算法
  11. vue添加定位功能_vue 实现Web端的定位功能 获取经纬度
  12. Android Palette吸色原理及源码解析
  13. 民企信息化建设个人经历(一)
  14. 步进电机之步进电机驱动器使用说明
  15. 类似吾爱破解论坛的网站有哪些?破解软件网站合集推荐
  16. 北京的交通无奈!!!
  17. [python]Crypto.Util.number ,long_to_bytes函数说明
  18. vim中字母大小写变换
  19. Day3:现金流三拷问---投资环节
  20. 做wish用多大的虚拟服务器,虚拟海外仓适应于wish,ebay,速卖通,自营平台

热门文章

  1. 【C#】跨平台UI库Avalonia的学习笔记(上)
  2. The Tomcat connector configured to listen on port 8090 failed to start.
  3. Android 9格锁屏
  4. 世界互联网大会,马云、马化腾、库克、李彦宏都说了一件事
  5. 令人头秃的cudaTensorCoreGemm详解
  6. MySQL自动化安装脚本-python版
  7. 备受瞩目 | Conflux频频亮相2019上海区块链国际周
  8. Git和GitHub学习笔记 V2.0(更新中...)
  9. 放大电路的分析方法2:图解法
  10. CentOS7下安装使用HBase