leetcode589. N-ary Tree Preorder Traversal

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 构造 迭代的方法值得借鉴。

posted @ 2018-09-04 22:21  dgi  阅读(945)  评论(0编辑  收藏  举报