0
点赞
收藏
分享

微信扫一扫

二叉树理论基础

笑望叔叔 2022-03-11 阅读 79

二叉树主要有两种形式:满二叉树和完全二叉树

满二叉树:如果一颗二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上。若深度为k,则有2^k-1个节点。

完全二叉树:在完全⼆叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最⼤ 值,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。

二叉搜索树:是一颗有序树。

若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值;

若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值;

它的左、右⼦树也分别为⼆叉排序树

 平衡二叉搜索树:它是⼀棵空树或 它的左右两个⼦树的⾼度差的绝对值不超过1,并且左右两个⼦树都是⼀棵平衡⼆叉树。

 

C++中map、set、multimap,multiset的底层实现都是平衡⼆叉搜索树,所以map、set的增删操作 时间时间复杂度是logn

unordered_map、unordered_set,unordered_map、 unordered_map底层实现是哈希表。

 

 定义二叉树的c++代码

struct TreeNode {
 int val;
 TreeNode *left;
 TreeNode *right;
 TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

二叉树的前序遍历

class Solution {
public:
 void traversal(TreeNode* cur, vector<int>& vec) {
 if (cur == NULL) return;
 vec.push_back(cur->val); // 中
 traversal(cur->left, vec); // 左
 traversal(cur->right, vec); // 右
 }
 vector<int> preorderTraversal(TreeNode* root) {
 vector<int> result;
 traversal(root, result);
 return result;
 }
};

二叉树的中序遍历

void traversal(TreeNode* cur, vector<int>& vec) {
 if (cur == NULL) return;
 traversal(cur->left, vec); // 左
 vec.push_back(cur->val); // 中
 traversal(cur->right, vec); // 右
}

二叉树的后序遍历

void traversal(TreeNode* cur, vector<int>& vec) {
 if (cur == NULL) return;
 traversal(cur->left, vec); // 左
 vec.push_back(cur->val); // 中
 traversal(cur->right, vec); // 右
}
举报

相关推荐

0 条评论