第五讲 二叉排序树、表达式树
1.二叉排序树 BST
中序遍历有序的二叉树 为 二叉排序树
2.平衡树——AVL
(1) 定义:满足如下条件的树:
a. 是二叉查找树
b. 每个节点的左子树和右子树的高度差最多为1
(2) 平衡因子:一个结点的左子树的高度减去右子树的高度,可取-1、0、1三种值
(3) 平衡操作
左旋 右旋 不改变中序遍历
中序遍历不变
3.表达式树
考的少
4.考题:2011-7、2012-4、2013-3(PDF中的分析有误,以上课讲解为准)、2013-6、2015-4、2018-6、2019-4、2019-6、2020-5、2017-41
2011-7
A
判断中序遍历是否有序
2012-4
B
2013-3
D 左旋 右旋 不改变中序遍历
2013-6
C
删除一个节点后又添加这个节点,树会不会不同
为叶节点: 相同
不为叶节点:
2015-4
D
AVL 树 中序遍历为降序
左子树一定大于此元素
最大元素一定无左子树
2018-6
C
2019-4
A
2019-6
A
表达式树的化简
到
2020-5
2017-41
C++: O ( n 2 ) O(n^2) O(n2)
/**
* Definition for a binary tree node.
* struct TreeNode {
* string val;
* TreeNode *left;
* TreeNode *right;
* };
*/
class Solution {
public:
string dfs(TreeNode* root){
if(!root) return "";
if(!root->left && !root->right) return root->val ;
else {
return "(" + dfs(root->left) + root->val + dfs(root->right )+")";
}
}
string expressionTree(TreeNode* root) {
return dfs(root->left) + root->val + dfs(root->right) ;
}
};