Day6---二叉树基础(上)

二叉树种类

  1. 满二叉树--------特点:深度为K,有2^k-1个节点
  2. 完全二叉树------特点:1.只能是最底层可能没填满;2.只可能是左右都没或者“左在右空”,其余情况都不是
  3. 二叉搜索树-------特点:左子树所有节点值都小于根节点,右子树则都大
  4. 平衡二叉树--------特点:左右子树的高度差不超过1

二叉树的遍历方式

主要可分为:
1.深度优先遍历(DFS)---------一条路走到底再返回:可分为前序、中序和后序
2.广度优先遍历(BFS)------一层一层走完(层次遍历)
###前序遍历

前序遍历—(中左右)
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;
    }
};
中序遍历—(左中右)
class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec) {
    if (cur == NULL) return;
    traversal(cur->left, vec);  // 左
    vec.push_back(cur->val);    // 中
    traversal(cur->right, vec); // 右
}
    vector<int> midorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
};
后序遍历—(左右中)
class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec) {
    if (cur == NULL) return;
    traversal(cur->left, vec);  // 左
    traversal(cur->right, vec); // 右
    vec.push_back(cur->val);    // 中
}
    vector<int> lastorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
};
层次遍历—(利用队列实现)
//层序遍历;需要依赖队列实现
vector<vector<int>> levelOrder(TreeNode* root)
{
    //1.先创建一个队列,存储根节点
    queue<TreeNode*> que;
    if(root!=NULL) que.push(root);
    vector<vector<int>> res;
    //2.while循环,进行树的遍历
    while(!que.empty())
    {
        int size=que.size();
        //3.创建一个容器,存放每一层的结果
        vector<int> vec;//存储每一层的结果
        //4.循环,输出当前一层的结果;并存储下一层 的节点
        for(int i=0;i<size;i++)
        {
            TreeNode *node=que.front();
            que.pop();
            vec.push_back(node->val);
            if(node->left) que.push(node->left);
            if(node->right) que.push(node->right);
        }
        res.push_back(vec);
    }
    return res;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值