2^(h - 1)
,h为树的高度,其他层都是度为2的节点。2^h - 1
n / 2 - 1
)struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
力扣题目链接: 前序遍历、中序遍历、后序遍历
root->left->left == nullptr && root->left->right == nullptr
这种情况才是正确的,其他情况就去递归左子树,右子树不用判断(因为右子树的判断交给递归了!!!),然后返回左右子树返回值之和。depth
,用来判断是不是最大深度pair
用来存储节点和sum,注意回溯。二叉树翻转
从中序与后遍历序列构造二叉树、从中序与后遍历序列构造二叉树
nullptr
root_index
root
上,返回root
即可。最大二叉树
合并二叉树
二叉搜索树中的搜索
接下来的四个题目其实是一道题,都要借助pre节点来实现,在二叉树中通过两个前后指针作比较,会经常用到。
验证二叉搜索树
二叉搜索树的最小绝对差
501.二叉搜索树中的众数
把二叉搜索树转换为累加树
二叉搜索树中的插入操作
删除二叉搜索树中的节点
修剪二叉搜索树
low
小,证明区间在树的右子树上,就往右走,如果跟节点值比high
大,说明区间在左子树上,就往左走,如果根节点恰好在区间里,那么就把根节点不动,去分别递归左右子树,返回的结果接在根节点的左右指针上就行。low
小的,那么就去判断cur的左子树是不是比low小,如果比low小,那么它左子树的左子树以及它都剪掉,把左子树的右子树接到cur到左子树上,此时cur的左子树已经更新,然后继续对cur的左子树判断,直到全部遍历完。108.将有序数组转换为二叉搜索树
涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中间节点。
求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。
求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。
注意在普通二叉树的属性中,一般为后序,但是单纯求深度就用前序,求最大深度就是求高度了那就用后序了,二叉树:找所有路径 (opens new window)也用了前序,这是为了方便让父节点指向子节点。