首页 > 其他分享 >day014(二叉树章节)+北境互娱游戏开发一面

day014(二叉树章节)+北境互娱游戏开发一面

时间:2024-08-03 19:55:39浏览次数:17  
标签:return 互娱 nullptr que 二叉树 left root 节点 day014

222.完全二叉树节点的个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

 思路:简单,层序遍历,每遍历一次,将队列中节点个数累加起来,最后返回即可。

class Solution {
public:
    int countNodes(TreeNode* root) {
            queue<TreeNode*> que;
            if(root!=nullptr){
                que.push(root);
            } 
            int NodeNum=0;
            while(!que.empty()){
                int size=que.size();
                NodeNum+=size;
                for(int i=0;i<size;i++){
                    TreeNode* node=que.front();
                    que.pop();
                    if(node->left)
                    que.push(node->left);
                    if(node->right)
                    que.push(node->right);
                }
            }
            return NodeNum;
    }
};

257.二叉树的所有路径节点

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

 1.思路:新创建一个函数travelRoot,用于实现递归.
首先递归三部曲1.确定传入参数 二叉树根节点,字符串path用于存储路径,字符串向量vector<string> 用于存储最终结果
2.确定终止条件
当 当前节点的左右节点都为空时 代表到达叶子节点 返回
3.确定单层递归逻辑
首先将根节点放入字符串向量中(要转成string类型),然后写终止条件(因为如果是最后一个节点 就不用加->了),之后再将path加上“->”进入递归。

class Solution {
public:
   void travelRoot(TreeNode* cur,vector<string>& res,string path){
    if(cur==nullptr){
        return ;
    }
       path+=to_string(cur->val);
        if(cur->left==nullptr&&cur->right==nullptr){
            res.push_back(path);
            return;
       }
         path+="->";
        travelRoot(cur->left,res,path);
        travelRoot(cur->right,res,path);
        return;
    }
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> res;
        string path;
        if(root==nullptr){
            return res;
        }
        travelRoot(root,res,path);
        return res;
    }
};

 404.左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

 思路:深度优先,根据左节点的性质--节点A左孩子不为空,节点A的左孩子的左右节点为空,那么此时,节点A的左孩子就是左节点,据此性质,通过递归找到左节点并进行相加操作,最后返回

class Solution {
public:
    void leftNode(TreeNode* root,int& result){
         if(root==nullptr){
            return ;
        }
        if(root->left!=nullptr&&root->left->left==nullptr&&root->left->right==nullptr){
            result+=root->left->val;
        }
        if(root->left==nullptr&&root->right==nullptr){
            return ;
        }
        leftNode(root->left,result);
        leftNode(root->right,result);
    }
    int sumOfLeftLeaves(TreeNode* root) {
    //节点A左孩子不为空,节点A的左孩子的左右节点为空,那么此时,节点A的左孩子就是左节点
    int result=0;
    leftNode(root,result);
        return result;
    }
};

513.找出树左下角的值

思路:用层序遍历,就很简单,只需要每次都记录第一个节点就可以了

class Solution {
public:
    int findBottomLeftValue(TreeNode* root) {
        queue<TreeNode*> que;
        int result=0;
        if(root==nullptr)
        return 0;
        que.push(root);
        while(!que.empty()){
            int size=que.size();
            for(int i=0;i<size;i++){
                TreeNode* node=que.front();
                que.pop();
                if(i==0)
                result=node->val;
                if(node->left)
                que.push(node->left);
                if(node->right)
                que.push(node->right);
            }
        }
          return result;
    }
  
};

游戏开发一面:问了半个小时左右

1.说说你对内存泄漏的理解?如何预防 内存分配是怎么样的

说了动态分配内存空间没有回收,野指针等,预防说了智能指针


2.智能指针


3.栈溢出怎么办?如何解决


4.四种强制类型转换


5.new和malloc的区别 底层


6.深拷贝浅拷贝


7.如何拷贝一段内存空间


8.C++如何判断是基类指针还是派生类指针
9.如何判断是属于父类还是属于子类(*)
10.TCP粘包是如何解决的 你的项目里是如何解决的(**)

我采用的是先收包大小,再收包内容。
11. TCP协议 重传机制 如何判断是否丢包
12.你的项目中极大极小搜索算法是如何实现的?

总结:有些想做游戏开发,但是我没有学Unity等知识基础,面试官也问了我有没有这方面基础,我说没有计算机图形学基础。。

标签:return,互娱,nullptr,que,二叉树,left,root,节点,day014
From: https://blog.csdn.net/m0_62956971/article/details/140814361

相关文章

  • 二叉树链式结构代码讲解与实现
    本片将续之前的文章二叉树的概念进行二叉树基本操作的实现,二叉树oj题将在下篇文章讲解。目录a.创建二叉树代码:一、二叉树的遍历1.1前序、中序以及后序遍历代码:如图:(前序遍历递归图解)测试代码:二、节点个数以及高度2.1 二叉树节点个数思想:要求二叉树的总节点个数,左......
  • 【数据结构】二叉树和堆
     一、二叉树1.二叉树的基本概念在C语言中,二叉树是一种基础的数据结构,它由节点组成,每个节点包含数据元素以及指向其他节点的指针。下面是二叉树的基本概念以及如何在C语言中表示和操作它。节点(Node):二叉树的每个元素称为节点,每个节点都有一个数据域和两个指针域,通常称为左指......
  • 代码随想录算法训练营Day18 | Leetcode 530 二叉搜索树的最小绝对差 Leetcode 236 二
    前言今天有一道题目没写,二叉搜索树中的众数,有点太难理解了,先放一放。Leetcode530二叉搜索树的最小绝对差题目链接:530.二叉搜索树的最小绝对差-力扣(LeetCode)代码随想录题解:代码随想录(programmercarl.com)思路:二叉搜索树的性质是中序遍历为升序的,所以我们想找最小绝......
  • Day18 二叉树Part6
    目录任务530.二叉搜索树的最小绝对差思路501.二叉搜索树中的众数思路236.二叉树的最近公共祖先思路心得体会任务530.二叉搜索树的最小绝对差给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。思路......
  • 先(后)序遍历确定唯一二叉树
    在二叉树的先序遍历或后序遍历序列中,如果我们记录了空节点的位置(通常用特殊符号如'#'表示),就足以唯一确定一棵二叉树的结构。这种方法的关键在于,记录空节点的位置能够帮助我们在遍历序列中准确地还原出树中节点的结构信息。因此,只要给出了先序遍历或后序遍历序列以及空节点的位置,......
  • 数据结构--------二叉树的定义及遍历操作的实现
    /*二叉树的链式存储以及基本操作*/#include<stdio.h>#include<stdlib.h>//树的节点typedefstructBTNode{intdata;structBTNode*lchild;structBTNode*rchild;}BTNode,*BTTree;/......
  • 【代码随想录训练营第42期 Day17打卡 二叉树Part5-LeetCode 654.最大二叉树 617.合并
    目录一、做题心得二、题目与题解题目一:654.最大二叉树题目链接题解:递归题目二:617.合并二叉树题目链接题解:递归(前序遍历)题目三:617.合并二叉树题目链接题解:BFS层序遍历 题目四:98.验证二叉搜索树题目链接题解:递归(中序遍历)三、小结一、做题心得今天是代码随想......
  • Day17 二叉树Part5
    目录任务654.最大二叉树思路617.合并二叉树思路700.二叉搜索树中的搜索思路98.验证二叉搜索树思路(错误)思路(正确)心得体会任务654.最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归......
  • 代码随想录day17 || 654 最大二叉树,617 合并二叉树,700 二叉搜索树搜索,98 验证二叉搜索
    645最大二叉树funcconstructMaximumBinaryTree(nums[]int)*TreeNode{ //思路,算法思路基本等同于通过中序前序构造二叉树 //1,取最大值作为根节点 //2,切割数组 //3,递归左右子树 iflen(nums)==0{ returnnil } //切割数组取最大值 max,left,right:=......
  • 数据结构:二叉树(链式结构)
    文章目录1.二叉树的链式结构2.二叉树的创建和实现相关功能2.1创建二叉树2.2二叉树的前,中,后序遍历2.2.1前序遍历2.2.2中序遍历2.2.3后序遍历2.3二叉树节点个数2.4二叉树叶子结点个数2.5二叉树第k层结点个数2.6二叉树的深度/高度2.7二叉树查找值为x的结点2.8......