二叉树
二叉树,优先想到DFS。
可能遍历存储所有路径,可使用set/map存储需要删除的节点。
二叉查找树:(Binary Search Tree) 二叉搜索树
定义:
- 任意节点的左子树中的键值都 小于 此节点的键值。
- 任意节点的右子树中的键值都 大于 此节点的键值。
- 任意节点的左子树和右子树都是二叉搜索树。
// 判断是否是二叉查找树?
bool IsBST(TreeNode* node, int minVal, int maxVal)
{
if (node == nullptr) {
return true;
}
if (node->val <= minVal || node->val >= maxVal) {
return false;
}
if (IsBST(node->left, minVal, node->val) == false) {
return false;
}
if (IsBST(node->right, node->val, maxVal) == false) {
return false;
}
return true;
}
IsBST(node, INT_MIN, INT_MAX); // 先判读是不是BST, 初始值很巧妙
多叉树
构造:使用map , (key, val), key代表根节点,val代表子节点。val可以使用vector来记录。
多叉树的遍历: DFS
void dfs(vector<string>& names, vector<string>& ans)
{
if (names.size() == 0) {
return;
}
for (int i = 0; i < names.size(); i++) {
ans.push_back(names[i]);
dfs(mp[names[i]], ans);
}
return;
}