python 版:
class Solution(object): def preorder(self, root): ret, q = [], root and [root] while q: node = q.pop() ret.append(node.val) q += [child for child in node.children[::-1] if child] return ret
看了,很久才看懂,因为太简洁,举一个小栗子会更好懂。
python关于构建树的数据结构:https://www.cnblogs.com/bjwu/p/9016566.html
自己写,反思疑问:
1.结点的容器定义,只有child的,没有左右节点,这个怎么确定是左边的叶子节点,还是右边的的呢?
2.这里面节点是如何存储的呢?看不懂。
答案如图,对容器和vector理解还不是很深入,现在记住了:vector就是不限长度的数组,而且这个数组可以放入任意类型的数据。
class Solution { public: void traversal(Node* root, vector<int>&ans) { ans.push_back(root->val); for(auto i:root->children) traversal(i,ans); } vector<int> preorder(Node* root) { vector<int> ans ; if(root==NULL) return ans; traversal(root,ans); return ans; } };
其中利用 for 构造 迭代的方法值得借鉴。