<>二叉树

存储方式:顺序存储和链式存储:

关于二叉树常用性质:
度、叶子节点的公式推导:
1。N0 = N2+1
2。N0 = N2+1
3。
满二叉:第i层有2^i-1次个节点
深度为h的二叉树最多有:(2^h) -1个节点

<>树的遍历:

最好体现叶之后的空:

<>二叉树的遍历

**注意:**所有NULL判断都应该放在开头,否则会出现如下类似错误,尤其是在中序后序遍历中。开头缺少NULL判断。

* 前序 void BinaryTreePrevOrder(BTNode* root) { if (root == NULL) { printf(
"NULL "); return; } printf("%d ", root->_data); BinaryTreePrevOrder(root->_left)
; BinaryTreePrevOrder(root->_right); }
* 中序 void BinaryTreeInOrder(BTNode* root) { if (root == NULL) { printf("NULL "
); return; } BinaryTreeInOrder(root->_left); printf("%d ", root->_data);
BinaryTreeInOrder(root->_right); }
* 后序 void BinaryTreePostOrder(BTNode* root) { if (root == NULL) { printf(
"NULL "); return; } BinaryTreePostOrder(root->_left); printf("%d ", root->_data)
; BinaryTreePostOrder(root->_right); }
<>二叉树的遍历

<>遇到的问题

*
函数调用出错了,函数名写错了或参数写错了。

*
0XFFF,总之是节点不存在。
后来检查发现,是我调用create函数出错了,在头文件.h中的函数和实现的函数名不一样。

*
有NULL判断,但是还是说来到了非法地址。
检查发现:该置NULL的地方没有值NULL。

<>OJ题

1. 单值二叉树
分析:
// 用异或可以的 // 递归思路:全部父亲和孩子相等,那就说明是单值 // 当然用一个set集合,最后求集合的大小:这样显然效率低 //
出口:为空返回True,空肯定不影响呀 // 先写错情况,不等就返回 // 如果走到下面,说明该局部都相等,需要再遍历到更深地方。 //
难点在:先写出false情况。 bool isUnivalTree(struct TreeNode* root){ if(root==NULL) {
return true; } // if(root->left && root->left->val != root->val) return false;
if(root->right && root->right->val != root->val) return false; // 如果走到下面,说明都相等
return isUnivalTree(root->left) && isUnivalTree(root->right); }
<>关于树的知识

树的表示法和代码:
// 静态地定义度为5的树,但是可能有的节点会浪费空间 #define N 5 struct TreeNode { int data; struct
TreeNode* childAddr[N]; int childSize; }; //顺序表存储孩子节点指针 struct TreeNode { int
data; // 数组指针,需要用二级来存 普通非指针类型数据用一级指针存 而一级指针数据的数组用二级指针 struct TreeNode**
childAddr; int childSize; int childCapacity; }; 打印: //孩子兄弟表示法 typedef int
DataType; struct Node { struct Node* firstC; // 第一个孩子指针 struct Node*
pNext_Brother; // 指向下一个兄弟节点 DataType data; // 数据域 }; ```c // 做孩子兄弟表示法的打印实现
typedef struct { struct Node* child; // 第一个孩子指针 struct Node* brother; //
指向下一个兄弟节点 int data; // 数据域 }Node; void printTree(Node* par) { if (par == NULL) {
return; } //printf("%d ", par->data); Node* cur = par->child; while (cur) { //
printf() printTree(cur); cur = cur->brother; } }
并查集是多棵树组成的数据结构

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信