LintCode_69 二叉树前序遍历

题目

给出一棵二叉树,返回其节点值的前序遍历。

和中序遍历基本相同

C++代码

vector<int> preorderTraversal(TreeNode *root) {
	// write your code here
	vector<int> vec;
	stack<TreeNode*> s;
	TreeNode* p = root;
	while (p || !s.empty())
	{
		while (p)
		{
			vec.push_back(p->val);
			s.push(p);
			p = p->left;
		}
		p = s.top();
		s.pop();
		p = p->right;
	}
	return vec;
}

  

时间: 2024-10-14 16:17:17

LintCode_69 二叉树前序遍历的相关文章

数据结构35:二叉树前序遍历、中序遍历和后序遍历

递归算法底层的实现使用的是栈存储结构,所以可以直接使用栈写出相应的非递归算法. 先序遍历的非递归算法 从树的根结点出发,遍历左孩子的同时,先将每个结点的右孩子压栈.当遇到结点没有左孩子的时候,取栈顶的右孩子.重复以上过程. 实现代码函数: // 先序遍历非递归算法 void PreOrderTraverse(BiTree Tree){ BiTNode *a[20]; // 定义一个顺序栈 BiTNode *p; // 临时指针 push(a, Tree); // 根结点进栈 while (top

二叉树前序遍历非递归写法

前序遍历非递归依靠栈实现,相对来说比较简单,先来用手写模拟一下基本就能知道怎么写了 据此可得如下代码 void preOrder_stack(BiTree T){ printf("\n非递归先序遍历结果:\n"); initStack(&sqStack); BiTree p=T; push(&sqStack,p); while(!stackEmpty(sqStack)){ pop(&sqStack,&p); printf("%d ",

二叉树——前序遍历、中序遍历、后序遍历、层序遍历详解(递归非递归)

前言 前面介绍了二叉排序树的构造和基本方法的实现.但是排序遍历也是比较重要的一环.所以笔者将前中后序.和层序遍历梳理一遍. 了解树的遍历,需要具有的只是储备有队列,递归,和栈.这里笔者都有进行过详细介绍,可以关注笔者数据结构与算法专栏.持续分享,共同学习. 层序遍历 层序遍历.听名字也知道是按层遍历.我们知道一个节点有左右节点.而每一层一层的遍历都和左右节点有着很大的关系.也就是我们选用的数据结构不能一股脑的往一个方向钻,而左右应该均衡考虑.这样我们就选用队列来实现. 对于队列,现进先出.从根节

二叉树前序遍历+中序遍历-&gt;后序遍历

BNU的基础题,数据结构的基础题,顺便搞下. 二叉树是一种常用的数据结构.我们可以用大写的英文字母表示二叉树的节点. 如下: B / \ / \ C A D 对于二叉树,有前序.中序和后序三种遍历方式. 现在给你一棵二叉树的前序和中序遍历,请你求出这棵二叉树的后序遍历结果. Input 输入数据有多组,每组数据一行. 每行由两个字符串组成(每个字符串长度最大为26).表示一棵二叉树的前序和中序遍历结果. 题目保证前序和中序遍历是合法的(即肯定可以确定一棵二叉树). Output 对于每组输入,输

二叉树前序遍历C#实现

迭代实现: 1 1 /** 2 2 * Definition for a binary tree node. 3 3 * public class TreeNode { 4 4 * public int val; 5 5 * public TreeNode left; 6 6 * public TreeNode right; 7 7 * public TreeNode(int x) { val = x; } 8 8 * } 9 9 */ 10 10 public class Solution {

[Leetcode 144]二叉树前序遍历Binary Tree Preorder Traversal

[题目] Given a binary tree, return the preordertraversal of its nodes' values. Example: Input: [1,null,2,3] 1 2 / 3 Output: [1,2,3] [思路] 有参考,好机智,使用堆栈压入右子树,暂时存储. 左子树遍历完成后遍历右子树. [代码] /** * Definition for a binary tree node. * public class TreeNode { * in

前序遍历和中序遍历重建二叉树

对于二叉树,在此我不做过多讲解,如有不懂,请参照一下链接点击打开链接 1.在此二叉树的定义: struct BinaryTreeNode     {         BinaryTreeNode<T> *_Left;         BinaryTreeNode<T> *_Right;         T _data;     public:         BinaryTreeNode(const T& x)             :_Left(NULL)       

用一棵二叉树的前序遍历结果和中序遍历结果还原这棵二叉树——6

输入某二叉树的前序遍历和中序遍历的结果,重建出这棵二叉树,假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出这棵满足前序遍历和中序遍历的二叉树并输出它的头结点. 对一棵二叉树前序遍历的顺序是"根结点->左结点->右结点",而中序遍历的顺序是"左结点->根节点->右结点",因此,一般的思路都是酱紫的: 前序遍历列表中,第一个数据

二叉树的前序遍历建立与二叉树的前序遍历查找

#include<iostream> #include<vector> using namespace std; //二叉树的定义 struct TreeNode { char val; TreeNode *left; TreeNode *right; TreeNode(int x='#') : val(x), left(NULL), right(NULL) {} }; //建立二叉树 //AB#D##C##前序遍历 void erchashu_jianli(TreeNode**