[职场感言] 工作一年了,聊聊三件事

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 971|回复: 5
收起左侧

狗面筋 电面 1个小题目没做好 :(

[复制链接] |试试Instant~ |关注本帖
dimi 发表于 2016-8-24 21:58:36 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类General 博士 全职@Google - 内推 - 技术电面  | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
给你一个多叉树。移出所有子树,当这个子树的全部节点的值的和为0。

我都写完了,但是中间出了几个bug. 代码也有点长,效果很不好。挂了。
谁试着写个elegent的解法把

评分

1

查看全部评分

hxtang 发表于 2016-8-24 23:57:23 | 显示全部楼层
hxtang 发表于 2016-8-24 23:56.留学论坛-一亩-三分地
试着写了一个
后序遍历的思路是对的,但是要注意两点:
(1) 传TreeNode*的引用,这样即使要删root也能删. from: 1point3acres
...

上面贴的代码不知道为啥抽风了...重新贴个

struct TreeNode {
    vector<TreeNode*> children;
    int val;
    TreeNode(int v) : val(v) {};.留学论坛-一亩-三分地
    ~TreeNode() { for (TreeNode* cnode: children) delete cnode; }
};

int subtree_sum(TreeNode* &pnode) {
    if (pnode == nullptr) return 0;
    int sum = pnode->val;
    for (TreeNode* cnode : pnode->children) sum += subtree_sum(cnode);
    if (sum == 0) {
        delete pnode;
        pnode = NULL;. 1point3acres
    }
    return sum;
}
回复 支持 1 反对 0

使用道具 举报

dydcfg 发表于 2016-8-24 22:10:44 | 显示全部楼层
试着写了一下,后根序遍历,然后删子树并且返回当前子树的和.

int dfs(TreeNode* root){.1point3acres网
        int ret=0;
        for (int i=0;i<(root->sons).size();i++){
                if (root->sons[i]!=NULL){. 牛人云集,一亩三分地
                        int subRet;
                        subRet=dfs(root->sons[i]);
                        if (subRet==0){
                                root->sons[i]=NULL;. 留学申请论坛-一亩三分地
                        }
                        ret+=subRet;
                }. 1point3acres
        }
        ret+=root->val;
        return ret;
}
回复 支持 反对

使用道具 举报

 楼主| dimi 发表于 2016-8-24 22:23:13 | 显示全部楼层
dydcfg 发表于 2016-8-24 22:10
试着写了一下,后根序遍历,然后删子树并且返回当前子树的和.

int dfs(TreeNode* root){
. 牛人云集,一亩三分地
nice. your solution is very good... thanks.
回复 支持 反对

使用道具 举报

edyyy 发表于 2016-8-24 22:45:01 | 显示全部楼层
谢谢楼主分享
好像这题在地里见过啊
回复 支持 反对

使用道具 举报

hxtang 发表于 2016-8-24 23:56:17 | 显示全部楼层
试着写了一个
后序遍历的思路是对的,但是要注意两点:
(1) 传TreeNode*的引用,这样即使要删root也能删
(2) 如果一棵子树sum为0,需要迭代删掉整个子树
  1. struct TreeNode {. from: 1point3acres
  2.     vector<TreeNode*> children;
  3.     int val;
  4.     TreeNode(int v) : val(v) {};
  5.     ~TreeNode() { for (TreeNode* cnode: children) delete cnode; }
  6. };
  7. -google 1point3acres
  8. int subtree_sum(TreeNode* &pnode) {
  9.     if (pnode == nullptr) return 0;
  10.     int sum = pnode->val;
  11.     for (TreeNode* cnode : pnode->children) sum += subtree_sum(cnode);. more info on 1point3acres
  12.     if (sum == 0) {
  13.     <span style="line-height: 1.5;">   </span><span style="line-height: 1.5;"> </span><span style="line-height: 1.5;">delete pnode;</span>
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-24 18:24

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表