选择题
🌈eg1
一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树,叶子节点的个数最多会差多少个()?
正确答案: C
A. 3 B. 5 C. 7 D. 9
🌈eg2
一棵有 n 个结点的二叉树,按层次从上到下、同一层从左到右顺序存储在一维数组 A[1…n] 中,则二叉树中第 i 个结点(i从1开始用上述方法编号)的右孩子在数组 A 中的位置是( )
正确答案:D
A. A[2i](2i <= n)
 B. A[2i + 1](2i + 1 <= n)
 C. A[i - 2]
 D. 条件不充分,无法确定
🌈eg3
已知-算术表达式的中缀表达式为 a-(b+c/d)*e , 其后缀形式为( )
正确答案:D
 A. -a+b*c/d
 B. -a+b*cd/e
 C. -+*abc/de
 D. abcd/+e*-
🌈eg4
将一棵有100个结点的完全二叉树从根这一层开始,开始进行层次遍历编号,那么编号最小的叶节点的编号为(),则编号为 98 的节点的父节点编号为()。 (根节点为1)
正确答案:51, 49
🌈eg5
设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是()。
正确答案:B
A. 空或只有一个结点 B. 高度等于其结点数
C. 任一结点无左孩子 D. 任一结点无右孩子
🌈eg6
某二叉树共有 399 个结点,其中 有199个为 度为2的 结点 ,则该二叉树中的叶子节点数为()
正确答案:C
A. 198 B. 199 C. 200 D. 201
🌈eg7
在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个
正确答案:D
A. 7 B. 0 C. 7 D. 6
🌈eg8
设一棵完全二叉树具有1000个结点,则此完全二叉树有()个度为2的结点。
正确答案:C
A. 497 B. 498 C. 499 D. 500
编程题
🎈eg1
从根到叶的二进制数之和

class Solution {
public:
    int dfs(TreeNode * root, int val){
        if(root == nullptr) return 0;
        val = (val << 1) | root->val; //二进制转10进制
        if(root->left == nullptr && root->right == nullptr) { //求叶子节点
            return val;
        }
        return dfs(root->left, val) + dfs(root->right, val);
    }
    int sumRootToLeaf(TreeNode* root) {
        return dfs(root, 0);
    }
};🎈eg2
二叉树的坡度

class Solution {
public:
    int ans = 0;
    int dfs(TreeNode* root){
        if(root == nullptr) return 0;
        int sl = dfs(root->left);
        int sr = dfs(root->right);
        ans += abs(sl - sr);
        return sl + sr + root->val;
        }
    int findTilt(TreeNode* root) {
        dfs(root);
        return ans;
    }
};🎈eg3
奇偶树

class Solution {
public:
    bool isEvenOddTree(TreeNode* root) {
        queue<TreeNode*> q;
        q.push(root);
        int level = 0;
        while(!q.empty()){
            int sz = q.size();
            int pre = level == 0 ? 0 : 1e6 + 1;
            for(int i = 0; i < sz; i++){
                TreeNode* next = q.front();
                q.pop();
                // 偶数递减 奇数递增
                if((level == 0 && next->val <= pre) || (level == 1 && next->val >= pre)) 
                    return false;
                //奇偶
                if((level == 0 && next->val % 2 == 0) || (level == 1 && next->val % 2 == 1)) 
                    return false;
                pre = next->val;
                if(next->left) q.push(next->left);
                if(next->right) q.push(next->right);
            }
            level ^= 1;
        }
        return true;
    }
};









