LeetCode-Populating Next Right Pointers in Each Node-填充结点的右指针-二叉树递归
https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/
构造一个按深度索引的数组,存储的当前遍历的结点在这一层的最右边的结点。
由前序遍历的特点可知同一层左边的儿子先被访问,过一段时间后会访问右边的儿子。利用这个特点连接next数组即可。
需要注意vec.size()-1在vec=0时不是-1,而是一个很大的整数(溢出了)。
/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} * }; */ typedef TreeLinkNode scnode; class Solution { public: vector<scnode *> ps; void PreOrder(scnode *rt,int l){ if (rt==NULL) return; if (l+1>ps.size()){ ps.push_back(NULL); } if (ps[l]!=NULL) ps[l]->next=rt; ps[l]=rt; rt->next=NULL; PreOrder(rt->left,l+1); PreOrder(rt->right,l+1); } void connect(TreeLinkNode *root) { PreOrder(root,0); } };