今天分享下二叉树的前中序遍历的迭代实现。我们都知道用递归来实现前中后序遍历是很简单的,非递归的实现则麻烦一些,我们先看看非递归的思路是什么。定义TreeNode结构如下:public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历 &nb
二叉树的遍历方式包括前序遍历、中序遍历和后序遍历,其实现方式包括递归实现和非递归实现。前序遍历:根节点 | 左子树 | 右子树中序遍历:左子树 | 根节点 | 右子树后序遍历:左子树 | 右子树 | 根节点1. 递归实现递归方式实现代码十分简洁,三种遍历方式的递归实现代码结构相同,只是执行顺序有所区别。前序遍历:public class preOrderRecur {
List res = new
#include <stdio.h> #include <stdlib.h> struct TNode { int number;
原创
2012-05-31 19:25:45
788阅读
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""Created on Mon May 13 15:48:30 2019@author: lg"""class Node: def __init__(self,value=0,left=0,right=0): self.value=value ...
原创
2023-01-12 23:47:40
71阅读
二叉树的先序、中序、后序遍历(递归 and 非递归)递归好写,非递归需要用栈就难写了。
原创
2022-08-23 20:19:14
100阅读
#include #include#include#include#includeusing namespace std;struct Tree{ int x; Tree *lchild, *rchild; Tree(){ lchild = rchild = NULL...
转载
2015-08-01 16:52:00
92阅读
2评论
闲来无事,又重新复习了一下二叉树遍历,最后附有完整的测试代码和运行结果。 文章目录1. 二叉树的先序遍历(非递归算法)2. 二叉树的先序遍历(递归算法)3. 二叉树的中序遍历(非递归算法)4. 二叉树的中序遍历(递归算法)5. 二叉树的后序遍历(非递归算法)6. 二叉树的后序遍历(递归算法)7. 二叉树的广度优先遍历(层次遍历)完整测试代码和运行结果 1. 二叉树的先序遍历(非递归算法)def p
class Node:
def __init__(self, num):
self.left = None
self.right = None
self.val = num1. 先序遍历根左右def inOrderTraverse(root):
p, stack = root, []
res = []
while p or len(stack) != 0:
if p:
转载
2023-06-04 19:01:47
55阅读
前言昨天把二叉树的先序遍历和中序遍历的题目给弄错了,今天重新补发下。【题目】按照二叉树的先序遍历打印二叉树,并且不能使用递归。【难度】易解答二叉树的先序遍历顺序是根-左-右。我们可以采用一个栈来辅助,我们把先序遍历的结果放到一个ArrayList容器中作为返回值,具体步骤如下:1、把二叉树的根节点root放进栈。2、如果栈不为空,从栈中取出一个节点,把该节点放入容器的尾部;如果该节点的右子树不为空
原创
2020-11-26 17:23:26
167阅读
目录一、题目描述题目中序遍历介绍二、递归实现递归遍历过程实现代码三、迭代实现迭代遍历过程实现代码 一、题目描述题目给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例1:输入:root = [1,null,2,3]
输出:[1,3,2]示例2:输入:root = []
输出:[]示例3:输入:root = [1,null,2]
输出:[1,2]中序遍历介绍二、递归实现递归遍历过程1.
对于一个二叉树,如果我们我们知道他的前序遍历和中序遍历,那就可以直接构造还原出完整的二叉树。举例:现在有一个二叉树,前序遍历是ABDECFG,中序遍历是DBEACGF。如何确定这个树的形态?首先前序遍历的第一个字母是根,所以确定A是根,而在中序遍历里,我们找到了A的下标为3,把中序遍历分成xxxAxxx两部分,所以A的左子树大小为3.右子树大小也是3。回到前序遍历,从A往后属3个就是左子树的前序遍
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/cla...
原创
2022-07-14 10:13:15
74阅读
默认给一棵树前序遍历的结果,按要求创建这棵树(#表示空),并用非递归的方法对它进行遍历。解题思路1.递归遍历: 则将二叉树的遍历看作是分治问题,将每一棵树都分为根-左子树-右子树三部分,每部分按同样的方法递归遍历即可。具体实现见下篇博客 二叉树的实现&递归遍历2.非递归遍历:我们可以借用栈的知识完成树的遍历。使用栈完成的过程以下面的前序遍历为例前序: 根–> 左–> 右 主要
import java.util.LinkedList;import java.util.Scanner;import java.util.Stack;//structure of binary treeclass BiTree { BiTree lchild; BiTree rchild; String data;}public class BiTreeTest { static Scanner scanner = new Scanner(System.in); // test case: a b c # # d e # g # # f # # # static BiTree createB
转载
2013-10-30 22:11:00
181阅读
先序遍历:根节点,左节点,右节点。 一、递归先序遍历 递归方式比较直接明了。 public static void preOrder(TreeNode root) { if (root == null) { return; } System.out.println(root.getValue()); ...
转载
2021-09-11 22:45:00
330阅读
2评论
一、中序遍历前中后序三种遍历方法对于左右结点的遍历顺序都是一样的(先左后右),唯一不同的就是根节点的出现位置。对于中序遍历来说,根结点的遍历位置在中间。所以中序遍历的顺序:左中右1.1 递归实现每次递归,只需要判断结点是不是None,否则按照左中右的顺序打印出结点value值。 # Definition for a binary tree node.
# class TreeNode:
#
#include <stdio.h>#include <stdlib.h>#define OK 1
原创
2022-11-10 14:31:36
90阅读
前序遍历:根在前 根左右 中序遍历:根在中 左根右 后序遍历:根在右 左右根首先是前序遍历的代码,思想就是从最初的根节点,一直往左,这些左节点的value依次添加到result列表中,当没有左节点之后,就可以pop当前根节点了,此时的stack最后一个节点是刚刚被pop的节点的上一个根节点,我们可以就可以取到上一个根节点的右节点; 如果右节点不为空,会以该右节点为根节点继续上述操作 如果该右节点