给出一棵二叉树,返回其节点值的前序遍历。
样例
给出一棵二叉树 {1,#,2,3}
,
1
\
2
/
3
返回 [1,2,3]
挑战
你能使用非递归实现么?
标签

View Code
递归 二叉树 二叉树遍历 非递归
递归实现:


1 /** 2 * Definition of TreeNode: 3 * class TreeNode { 4 * public: 5 * int val; 6 * TreeNode *left, *right; 7 * TreeNode(int val) { 8 * this->val = val; 9 * this->left = this->right = NULL; 10 * } 11 * } 12 */ 13 14 class Solution { 15 public: 16 vector<int> s; 17 /** 18 * @param root: The root of binary tree. 19 * @return: Preorder in vector which contains node values. 20 */ 21 22 vector<int> preorderTraversal(TreeNode *root) { 23 // write your code here 24 if(root==NULL) 25 return s; 26 if(root!=NULL) 27 { 28 s.push_back(root->val); 29 preorderTraversal(root->left); 30 preorderTraversal(root->right); 31 return s; 32 } 33 } 34 };
一开始写这玩意,一直把vector写在函数里面,怎么都过不了。
原因是递归调用每一次都会重新定义一次,最后的返回值只会有一个。
然后百度了半天怎么样才可以在递归调用的时候,怎样才可以不被重新定义,然而都没有成功。最后百度到一篇是直接写在外面就AC了。真的好气,好蠢。
怎么就没想到写在外面呢。
非递归实现的有空在做一做。