zoukankan      html  css  js  c++  java
  • Leetcode 863--二叉树中所有距离为 K 的结点

    首先找到每个节点的父节点,利用map存储(map底层用红黑树实现,所以查找效率也高),这种方法客服了二叉树只能找到自己的儿子的缺点。

    然后用dfs搜索的方法寻找目标节点。

    代码如下:

    class Solution {
    public:
    map<TreeNode*,TreeNode*> par;
    void findparent(TreeNode* root){
    if(!root) return;
    if(root->left){
    par[root->left]=root;
    findparent(root->left);
    }
    if(root->right){
    par[root->right]=root;
    findparent(root->right);
    }
    }
    void dfs(TreeNode* root,int k,set<TreeNode*> &visited,vector<int>&res){
    if(visited.find(root)!=visited.end()) return;
    visited.insert(root);
    if(k==0){
    res.push_back(root->val);
    return;
    }
    if(root->left)
    dfs(root->left,k-1,visited,res);
    if(root->right)
    dfs(root->right,k-1,visited,res);
    TreeNode* p=par[root];
    if(p)
    dfs(p,k-1,visited,res);
    }
    vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
    if(!root)
    return {};
    findparent(root);
    vector<int> res;
    set<TreeNode*> visited;
    dfs(target,K,visited,res);
    return res;
    }
    };

  • 相关阅读:
    摄像机
    变换
    纹理
    从顶点数据中传入顶点位置和顶点颜色
    使用glew和glad 新建窗口
    openGL坐标系
    glViewport函数用法
    彻底搞懂CSS文本、空白换行问题
    Django 搭建
    HessianSharp如何部署到IIS7上?
  • 原文地址:https://www.cnblogs.com/jundima/p/10176815.html
Copyright © 2011-2022 走看看