面试常见知识点--树的遍历

这篇具有很好参考价值的文章主要介绍了面试常见知识点--树的遍历。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前序遍历

算法流程:

1.先申请一个栈,记为stk

2.然后将根节点压入stk中。

3.每次从stk中弹出栈顶节点,记为cur,然后打印cur的值。如果cur的右子树不为空,将cur的右子树压入stk中。如果cur的左子树不为空,将cur的左子树压入stk中。不断重复次步骤直到stk为空循环结束。

void Tree::Preorder(Node* root) {
	stack<Node*>stk;
	stk.push(root);
	cout << "前序遍历" << endl;
	while (!stk.empty()) {
		Node* cur = stk.top();
		cout << cur->val << " ";
		stk.pop();
		if (cur->right) {
			stk.push(cur->right);
		}
		if (cur->left) {
			stk.push(cur->left);
		}
	}
}

二、中序遍历

1.申请一个栈记为stk,申请一个变量curcur被根节点初始化。

2.把cur节点压入栈中,对以cur节点为根节点的整棵子树,依次把整棵树的左边界压入到栈中,即不断的执stk.push(cur) ; cur = cur->left;直到cur为空停止本次循环。

3.上面循环停止后,弹出栈顶节点,记录为node,打印node,并且让cur=node->right;然后继续重复步骤2

4.直到stk为空并且cur也为空时,停止整个循环。

void Tree::Inorder(Node* root) {
	Node* cur = root;
	stack<Node*>stk;
	cout << endl;
	cout << "中序遍历"<<endl;
	while (cur||!stk.empty()) {
		while(cur){
			stk.push(cur);
			cur = cur->left;
		}
		Node* Node = stk.top();
		stk.pop();
		cout << Node->val << " ";
		cur = Node->right;
	}

三、后序遍历

1.申请两个栈,记为S1S2,然后将头结点压入S1中。

2.s1中弹出的节点记为cur;然后先把cur的左子树压入到s1中,然后把cur的右子树压入到s1中。每一个从S1中弹出的节点都放进S2中。

3.不断重复步骤2,直到S1为空,整个过程结束。文章来源地址https://www.toymoban.com/news/detail-789138.html

void Tree::Postorder(Node* root) {
	stack<Node*>S1;
	stack<Node*>S2;;
	S1.push(root);
	cout << endl;
	cout << "后序遍历" << endl;
	while (!S1.empty()) {
		Node* cur = S1.top();
		S2.push(cur);
		S1.pop();
		if (cur->left) {
			S1.push(cur->left);
		}
		if (cur->right) {
			S1.push(cur->right);
		}		
		}
	    while (!S2.empty()) {
        cout << S2.top()->val << " ";
	S2.pop();	
	}
}

到了这里,关于面试常见知识点--树的遍历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java面试题:解释Java的基本数据类型及其大小和默认值,列举数据类型常见的错误知识点

    Java的基本数据类型是Java编程语言中用于存储简单值的类型。这些数据类型包括整数类型、浮点类型、字符类型和布尔类型。下面是对这些基本数据类型的详细解释,包括它们的大小和默认值,以及一些常见的面试中容易出错的知识点。 基本数据类型及其大小和默认值 整型

    2024年04月16日
    浏览(13)
  • 常见java知识点1

    常见java知识点1

    目录 1    什么是Spring框架?Spring框架有哪些主要模块? 2    使用Spring框架有什么好处? 3    Java常用的包(列举六个) 4    Arraylist 和 Linkedlist 的区别 5    HashMap和Hashtable的区别 6    Java中常见的 io 流? 7    说一下常见的几个线程池?(Java里面有4个线程池) 8  

    2024年02月16日
    浏览(8)
  • 【字节面试】Fail-fast知识点相关知识点

    【字节面试】Fail-fast知识点相关知识点

    字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 什么是Fail-fast机制? Hashmap是否拥有Fail-fast机制? ConcurrentModificationException异常原因和解决方法是什么? 哪些你常

    2024年01月22日
    浏览(14)
  • 微信小程序常见知识点

    小程序是一种开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷的获取和传播,同时具有出色的使用体验。 微信小程序的优势: 微信助理,容易推广。 小程序拥有众多入口,这些入口有助于企业更好的获取流量,从而进行转化、变现。 使用便捷。

    2024年02月08日
    浏览(7)
  • vue面试知识点

    Unsplash class 和 style 使用动态属性,使用驼峰式写法 v-if 和 v-show v-if 不渲染不满足判断条件的模块, v-show 渲染但不显示,使用场景:是否多次切换或频繁更新条件状态 keep-alive 缓存组件,使用场景:频繁切换,不需要重复渲染 v-for 中添加唯一的 key 为了高效的更新虚拟 DOM,

    2024年02月11日
    浏览(25)
  • 2023面试知识点一

    2023面试知识点一

    默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 t

    2024年02月07日
    浏览(8)
  • Java 面试知识点

    Java 面试知识点

    基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的 语法,集合的语法,io 的语法,虚拟机方面的语法。 和都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否

    2024年02月16日
    浏览(9)
  • FPGA面试-常用知识点

    FPGA面试-常用知识点

    本贴记录一下自己找工作过程中顺下来的知识点,如有错误的,请不吝指出,共同进步!   a) FPGA FPGA 基于 LUT ,LUT本质上就是一个RAM,每一个LUT可以看成一个有4位地址线的16x1的RAM。这也是为什么FPGA需要外接一个rom来上电配置。 包括 CLBs , I/O 块, RAM 块和可编程连线 。 在

    2024年04月26日
    浏览(10)
  • 多线程面试相关知识点

    多线程面试相关知识点

    程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一

    2024年02月08日
    浏览(37)
  • 软考知识点——常见算法策略、设计模式、常见排序算法

    软考知识点——常见算法策略、设计模式、常见排序算法

    目录 一、常见算法策略 二、设计模式 1.设计模式分类 2.创建型设计模式应用场景 3.结构型设计模式应用场景  4.行为型设计模式应用场景 三、常见排序算法 算法名称 关键点 特征 典型问题 分治法 递归技术 把一个问题拆分成多个小模块的相同子问题,一般可用递归解决。

    2024年02月07日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包