本函数(见下述代码)能够实现将二叉树(最小节点数为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;
}