二叉树的遍历--循环的方法

对于数据结构这方面来说,重点就是二叉树的遍历等操作,所有的问题基本都是集中在这里,先说一个二叉树的循环遍历的方法:

vector<int> preOrderTraversal(TreeNode *head)
{
	vector<int> result;
	const TreeNode *p;

	stack<const TreeNode*> s;

	p = head;
	if(p != NULL)
		s.push(p);

	while(!s.empty())
	{
		p = s.top();
		s.pop();
		result.push_back(p->val);

		if(p->left != NULL)
			s.push(p->left);
		if(p->right != NULL)
			s.push(p->left);
	}

	return result;
}

  注意vector和stack的使用,遍历的结果放到了一个vector中,并且返回给调用函数。

时间: 2024-10-08 09:01:59

二叉树的遍历--循环的方法的相关文章

浅谈二叉树遍历的栈方法

  众多周知,对于二叉树的遍历, 一种比较容易理解以及编写的方式就是递归的方式了,下面针对二叉树遍历的中序遍历做一个简单的分析: void travelTree(BiTree T, int deep){ if (T->lchild != NULL) travelTree(T->lchild, ++deep); for (int x = 0; x < deep; x++) { printf("--"); } printf("%c\n", T->

用循环的方法实现二叉树的镜像

程序中包含了递归方法 和循环方法 #include <iostream> #include <queue> using namespace std; struct tree { int value; tree *left; tree *right; }; tree *create() { int n; cin>>n; if (n == 0) { return NULL; } else { tree *root = new tree; root->value = n

二叉树的遍历(递归和非递归两种方法)

二叉树的遍历 1.二叉树的定义 (1)C语言版 typedef struct BiNode { ElemType val; struct BiNode *left,*right; }BiNode,*BiTreee; (2)C++版 struct TreeNode { ElemType val; TreeNode *left; TreeNode *right; }; 我们可以看到这两种定义的格式是不一样的,自己以前一直是在C++程序中用C语言版的定义.网上不同人采用的也不一样,最终在写二叉树的相关

学JAVA第八天,for循环算质数及for遍历数组的方法。

昨天终于收到了评论,老开心了!!! 算质数之前是我最怕的一件事,以前上学不好好学,之前学C#的时候也没好好研究, 直到今天老师逼我要用JAVA算质数,硬着头皮琢磨老半天才琢磨透,现在看来也挺简单的. 好了,废话就不多捞了,上代码: package pkg5;class Zhi{ public static void main(String[] args) { int a=500;//声明0到500的数,用来找质数的范围 int b=8; //声明每行要打印的质数的个数 //声明变量 int su

【算法日常】二叉树常用遍历方法

二叉树的遍历 本篇算一个资料整理,就是二叉树遍历方法,有先序遍历(PreOrder).中序遍历(InOrder).后序遍历(PostOrder).广度优先遍历二叉树(breadth_first_search).深度优先遍历(depth_first_search) 示例遍历二叉树: 二叉树节点格式: class TreeNode: def __init__(self, val): self.val = val self.left = self.right = None 1. 先序遍历 PreOrd

数据结构第三部分:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算

参考:浙大数据结构(陈越.何钦铭)课件 1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找——方法一:顺序查找(时间复杂度O(n)) int

数据结构——二叉树的遍历

"树"是一种重要的数据结构,本文浅谈二叉树的遍历问题,採用C语言描写叙述. 一.二叉树基础 1)定义:有且仅有一个根结点,除根节点外,每一个结点仅仅有一个父结点,最多含有两个子节点,子节点有左右之分. 2)存储结构 二叉树的存储结构能够採用顺序存储,也能够採用链式存储,当中链式存储更加灵活. 在链式存储结构中,与线性链表类似,二叉树的每一个结点採用结构体表示,结构体包括三个域:数据域.左指针.右指针. 二叉树在C语言中的定义例如以下: struct BiTreeNode{ int c;

数据结构-王道2017-第4章 树与二叉树-二叉树的遍历

typedef int ElemType; typedef struct BitNode { ElemType data; //数据域 struct BitNode *lchild, *rchild; //左右孩子指针 }BitNode,*BitTree; void visit(BitNode *b) { printf("%d ", b->data); } //无论采用哪种遍历方法,时间复杂度都是O(n),因为每个结点都访问一次且仅访问一次,递归工作栈的栈深恰好为树的深度,空间复

一步一步写算法(之二叉树广度遍历)

原文:一步一步写算法(之二叉树广度遍历) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在二叉树的遍历当中,有一种遍历方法是不常见的,那就是广度遍历.和其他三种遍历方法不同,二叉树的广度遍历需要额外的数据结构来帮助一下?什么数据结构呢?那就是队列.因为队列具有先进先出的特点,这个特点要求我们在遍历新的一层数据之前,必须对上一次的数据全部遍历结束.暂时还没有掌握队列知识的朋友可以看一看我的这一篇博客-队列. a)下面是新添加的队列数据结构