Binary Tree Preorder Traversal
来源:互联网 发布:淘宝美工怎么接私活 编辑:程序博客网 时间:2024/05/16 09:07
Description:
Given a binary tree, return the preorder traversal of its nodes’ values.
For example: Given binary tree {1,#,2,3},
return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
分析:
用栈遍历
代码:
#include <iostream>#include <stack>#include <vector>#define Elementype charusing namespace std;typedef struct TreeNode //树结点{ Elementype val; TreeNode *left; TreeNode *right; TreeNode(Elementype x) : val(x), left(nullptr), right(nullptr) {}} *Tree;int index = 0; //全局索引变量//使用先序遍历创建创建二叉树//左子树或右子树不存在用"#"表示void MakeBinaryTree(Tree &T, Elementype value[]){ Elementype c = value[index++]; if (c == '#') T = nullptr; else { T = new TreeNode(c); MakeBinaryTree(T->left, value); MakeBinaryTree(T->right, value); }}//先序递归遍历/*void BinaryTreepreorderTraversal(Tree root){if (root){cout<<root->val<<" ";BinaryTreepreorderTraversal(root->left);BinaryTreepreorderTraversal(root->right);}}*///非递归先序遍历//使用栈,每访问一个结点,出栈,左右结点入栈vector<Elementype> BinaryTreepreorderTraversal(Tree root){ vector<Elementype> result; stack<Tree> sk; Tree p = root; if (p != nullptr) sk.push(p); while (!sk.empty()) { p = sk.top(); sk.pop(); result.push_back(p->val); if (p->right != nullptr) sk.push(p->right); if (p->left != nullptr) sk.push(p->left); } return result;}int main(){ Tree T = nullptr; Elementype data[7] = {'1','#','2','3','#','#','#'}; //注意,每个结点都要有值 vector<Elementype> result; MakeBinaryTree(T, data); result = BinaryTreepreorderTraversal(T); for (auto &s : result) cout << s << " "; cout << endl; system("pause"); return 0;}
测试:
0 0
- 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
- 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
- instore environment of Javaweb(Tomcat+JDK+MySQL) in ESC
- Android获取内置和外置sd卡路径的方法
- LintCode:堆化
- 复平面
- LDA的python实现之模型参数训练
- Binary Tree Preorder Traversal
- Leftmost Digit
- 各种浏览器内核的区别
- HDU 1421 搬寝室
- 欢迎使用CSDN-markdown编辑器
- Linux C笔记3——Shell编程之选择语句
- gd32的rtc使用心得
- Android 中系统组件GridView属性笔记
- HDU4707 pet