Leetcode_863. 二叉树中所有距离为 K 的结点 BFS/recursion

给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。

返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。

方法1. BFS  

二叉树转化为图的操作 buildtree

class Solution {
private:
    unordered_map<TreeNode *,vector<TreeNode *>> g;
    void buildtree(TreeNode * parent,TreeNode *child){
        if(parent){
            g[parent].push_back(child);
            g[child].push_back(parent);
        }
        if(child->left) buildtree(child,child->left);
        if(child->right) buildtree(child,child->right);
    }
public:
    vector<int> distanceK(TreeNode* root, TreeNode* target, int K) {
        vector<int> ans;
        buildtree(NULL,root);
        unordered_set<TreeNode *> visit;
        queue<TreeNode *> qu;
        qu.push(target);
        visit.insert(target);

        int k=0;
        while(!qu.empty() && k<=K){
            int len=qu.size();
            while(len--){
                TreeNode * cur=qu.front();qu.pop();
                if(k==K) ans.push_back(cur->val);
 
                for(TreeNode * x:g[cur]){
                    if(visit.count(x)==0){ 
                        qu.push(x);
                        visit.insert(x); 
                    }
                }               
            }
            k++;
        }
    return ans;
    }
};
发布了88 篇原创文章 · 获赞 77 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43107805/article/details/105336375