劍指offer之樹

今天在劍指offer上刷了樹的層次遍歷

struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
vector<int> PrintFromTopToBottom(TreeNode* root) 
{
      vector<int> res;  //存放結果
      queen<TreeNode*> q;  //創建一個隊列
      TreeNode* temp;   
      if(root == NULL)
        return res;
      q.push(root);   //root node into the queen
      while(!q.empty())   //隊列不爲空不結束
      {
           temp = q.front();    //temp point to the first element of queen
           res.push_back(temp->val);   //res +=temp.val
           if(temp->left!=NULL)      
              q.push(temp->left);     //Tree node in turn into the quene
	   if(temp->right != NULL)
              q.push(temp->right);
           q.pop();
      }
     return res;
 }

思路就是創建一個隊列,首先根節點入隊,然後根節點值存入vector中,然後遍歷左節點和右節點,分別入隊,然後pop 隊列的第一個點,然後循環,最後隊列爲空結束。


下面是python版本

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回從上到下每個節點值列表,例:[1,2,3]
    def PrintFromTopToBottom(self, root):
            # write code here
            res = []
            if not root:
                return []
            q = [root]
            while len(q):
                t = q.pop(0)  //這裏和C++不一樣的是由於取隊列的第一個值的方式不同,python這裏是把第一個值吐出來,C++是
                                用.front()函數讀這個數,最後在一次循環的最後pop出 
                res.append(t.val)
                if t.left:
                    q.append(t.left)
                if t.right:
                    q.append(t.right)
            return res

還複習了一下隊列的使用方式:

queue單向隊列與有點類似,一個是在同一端存取數據,另一個是在一端存入數據,另一端取出數據。單向隊列中的數據是先進先出(First In First Out,FIFO)。在STL中,單向隊列也是以別的容器作爲底部結構,再將接口改變,使之符合單向隊列的特性就可以了。因此實現也是非常方便的。下面就給出單向隊列的函數列表和VS2008中單向隊列的源代碼。單向隊列一共6個常用函數(front()、back()、push()、pop()、empty()、size()),與的常用函數較爲相似。

push 是在尾部增加數據

pop是默認在頭部刪除數據







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章