leetcode_c++:栈:Binary Tree Preorder Traversal(144)
来源:互联网 发布:购买医疗医疗器械软件 编辑:程序博客网 时间:2024/05/08 16:11
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].
递归
#include <stdio.h>#include <stdlib.h>#include<time.h>#include<iostream>#include<vector>#include<stack>#include<algorithm>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {private: void orderHelper(vector<int> &res,TreeNode* cur){ if(!cur) return; res.push_back(cur->val); if(cur->left) orderHelper(res,cur->left); if(cur->right) orderHelper(res,cur->right); }public: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; orderHelper(res,root); return res; }};TreeNode* createTree(int a[],int n){ if(n<=0) return NULL; TreeNode** tree=new TreeNode* [n]; for(int i=0;i<n;i++){ if(a[i]==0){ tree[i]=NULL; continue; } tree[i] = new TreeNode(a[i]); } int pos=1; for(int i=0;i<n && pos<n;i++){ if(tree[i]){ tree[i]->left=tree[pos++]; if(pos<n) tree[i]->right=tree[pos++]; } } return tree[0];}void printfTree_pre_order(TreeNode* root){ if(root==NULL) return; cout<<root->val<<" "; printfTree_pre_order(root->left); printfTree_pre_order(root->right);}void printArray(vector<int> v){ for(int i=0;i<v.size();i++) cout<<v[i]<<" "; cout<< endl;}int main(){ Solution st; int a[]={1,2,3,4,5,0,6,0,0,7,8,9,0}; TreeNode* p=createTree(a,sizeof(a)/sizeof(int)); printfTree_pre_order(p); cout<<endl; vector<int> v=st.preorderTraversal(p); printArray(v); cout<<endl; return 0;}
迭代
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> v; vector<TreeNode* > stack; if(root) stack.push_back(root); while(stack.size()>0){ TreeNode* n=stack.back(); v.push_back(n->val); stack.pop_back(); if(n->right) stack.push_back(n->right); if(n->left) stack.push_back(n->left); } return v; }};
0 0
- leetcode_c++:栈:Binary Tree Preorder Traversal(144)
- 144:Binary Tree Preorder Traversal【树】【栈】
- [144]Binary Tree Preorder Traversal
- 144、Binary Tree Preorder Traversal
- 144Binary Tree Preorder Traversal
- 144 Binary Tree Preorder Traversal
- leetcode_c++:栈:Binary Tree Postorder Traversal(145)
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal
- ExpandableListView方法详解
- vagrant入门教程--安装vagrant(2)
- c++ efective
- NOIP - 接水问题
- C#使用GET、POST请求获取结果
- leetcode_c++:栈:Binary Tree Preorder Traversal(144)
- Framework的启动过程---Dalvik虚拟机相关的可执行程序
- SQL的几种语言
- 各种锁的效率比较
- web缓存技术和HTTP代理
- java开发webservice
- 行人检测方法代码汇总
- java中InvocationHandler 用于实现代理。
- Python 正则表达式