zoukankan      html  css  js  c++  java
  • [LeetCode]Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values.

    For example: Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [1,2,3].

    Note: Recursive solution is trivial, could you do it iteratively?

    思考:不可以递归,那么用栈存储结点。

    先用递归法做,算是加深记忆。需要注意ret需要清空,不然会记录上一次测试用例,所以将先序遍历单独写出来。

    class Solution {
    private:
    	vector<int> ret;
    public:
    	void preorder(TreeNode *root)
    	{
    		if(root) 
    		{
    			ret.push_back(root->val);
    			preorder(root->left);
    			preorder(root->right);
    		}
    	}
        vector<int> preorderTraversal(TreeNode *root) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
    		ret.clear();
    		preorder(root);
    		return ret;
        }
    };
    

    非递归法:用栈存储遍历过的结点,先右子树后子树。

    class Solution {
    private:
    	vector<int> ret;
    public:
        vector<int> preorderTraversal(TreeNode *root) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
    		ret.clear();
    		if(!root) return ret;
    		stack<TreeNode *> s;
    		s.push(root);		
    		while(!s.empty())
    		{
    			TreeNode *cur=s.top();
    			s.pop();
    			ret.push_back(cur->val);
    			if(cur->right)
    				s.push(cur->right);
    			if(cur->left) 
    				s.push(cur->left);					
    		}
    		return ret;
        }
    };
    

      

  • 相关阅读:
    Android Activity
    As3 3D学习之rotation
    Android学习之Android自带例子 ContactManager
    Android学习之 Menu
    Android学习之 Intent
    VC++学习之建立窗口
    As3 3D学习之屏幕与3D坐标
    Android学习之 Button onClickListener实现方法
    ClientDataSet 心得
    部分系统路径
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3424357.html
Copyright © 2011-2022 走看看