将二叉树转化为图结构

发布于:2022-07-26 ⋅ 阅读:(400) ⋅ 点赞:(0)

本函数(见下述代码)能够实现将二叉树(最小节点数为1)转为图结构,是在做题的过程中用的一个函数,在这里发出来当个笔记吧

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
vector<vector<int>> constructGraph(TreeNode* root){
        vector<int> gNode(5,0);//graphNode
        vector<vector<int>> graph;
        graph.push_back(vector<int>(5,0));//5列分别表示:节点下标,节点值,父节点,左节点,右节点
        int n=0;//n表示当前入列节点数
        queue<TreeNode*> line;
        line.push(root); graph.push_back(gNode); n++;
        graph[n][0]=n; 
        graph[n][1]=root->val;        
        graph[n][2]=0;

        int li=0;//li表示当前列首节点下标,需要注意n和li的区别
        while(!empty(line)){            
            TreeNode* cur=line.front();li++;
            int curInd= graph[li][0];          

            TreeNode* L=cur->left;
            if(L){
                line.push(L); graph.push_back(gNode); n++;
                graph[n][0]=n;//节点下标
                graph[n][1]=L->val;//节点值       
                graph[n][2]=curInd;//父节点
                graph[curInd][3]=n;//当前节点的父节点的左节点是当前节点
            }
            
            TreeNode* R=cur->right;
            if(R){
                line.push(R); graph.push_back(gNode); n++; 
                graph[n][0]=n;
                graph[n][1]=R->val; 
                graph[n][2]=curInd;//父节点
                graph[curInd][4]=n;//当前节点的父节点的右节点是当前节点                
            }     
            line.pop();
        }
        return graph;
    }

网站公告

今日签到

点亮在社区的每一天
去签到