中序遍历

由中序遍历和后序遍历求前序遍历

佐手、 提交于 2020-03-09 07:30:37
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 typedef long long LL; 7 const int maxn = 30; 8 char in[maxn], post[maxn]; 9 void Build_PostTree(char *in, char *post, int len) 10 { 11 if(len == 0) return; 12 cout << *(post + len - 1); 13 int i = 0; 14 for( ; i < len; i++) 15 if(in[i] == *(post + len - 1)) break; 16 Build_PostTree(in, post, i); //Left 17 Build_PostTree(in + i + 1, post + i, len - i - 1); // Right 18 return ; 19 } 20 int main() 21 { 22 freopen("in.txt","r",stdin); 23 while(scanf("%s %s", in, post) != EOF){ 24 int len

【树的遍历】前序中序求后序,中序后序求前序

喜你入骨 提交于 2020-03-09 07:25:22
1>求前序 #include<cstdio> #include<cstdlib> #include<iostream> using namespace std; string m,f; int len,mid[30],front[30]; int son[30][2],root; int fz(int l1,int r1,int l2,int r2) { if(l1>r1) return 0; if(l1==r1) return front[l1]; int rt=front[l1]; int pos; for(pos=l2;pos<r2;pos++) if(mid[pos]==rt) break; int ln=pos-l2; son[rt][0]=fz(l1+1,l1+ln, l2,l2+ln-1); son[rt][1]=fz(l1+ln+1,r1, l2+ln+1,r2); return rt; } void back(int rt) { if(son[rt][0]) back(son[rt][0]); if(son[rt][1]) back(son[rt][1]); printf("%c",'A'+rt-1); } int main() { cin>>m>>f; len=m.length() ; for(int i=0;i<len;i++) mid[i]=m[i]-'A'

二叉树的中序遍历

徘徊边缘 提交于 2020-03-09 05:02:26
文章目录 递归 递归时直接打印 辅助函数 迭代 基于栈的遍历 注 给定一个二叉树,返回它的中序 遍历。 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ 递归 递归时直接打印 public static void inOrderRecur(Node root){ if(root== null) return; inOrderRecur(root.left); System.out.print(root.value + " "); inOrderRecur(root.right); } 辅助函数 时间复杂度:O(n),递归函数T(n)=2*T(n/2)+1 空间复杂度:最坏情况下需要空间O(n),平均情况为O(logn) class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer>list = new ArrayList(); helper(root,

求后序遍历

北战南征 提交于 2020-03-08 01:05:29
描述 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 格式 输入格式 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。 输出格式 一行,表示树的后序遍历序列。 样例 输入样例 abdec dbeac 输出样例 debca #include <iostream> #include <stdio.h> #include <cstring> #include <stdio.h> #include <algorithm> #include <cmath> using namespace std; //abdhecfg //hdbeafcg //hdebfgca char pre[100],mid[100],rear[100]; int find(char a[],int x){ int len = strlen(a); for(int i=0; i<len; ++i){ if(a[i] == x){ return i; } } return -1; } void solve(char a[], char b[],int as, int ae, int bs, int be){ int m = find(b, a[as]); // printf("m = %c\n",b[m]); if(m == -1){ return ; } int i; char

剑指offer - 中序+先序遍历创建数组

痴心易碎 提交于 2020-03-07 09:22:14
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 在前序遍历里面找到第一个数,则这个数为root,然后在中序遍历的数组中找到这个数,则这个数前面的数都构成root的左子树,右边的点构成其右子树。 然后用递归 class Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(self, pre, tin): # write code here if len(pre) == 0: return None elif len(pre) == 1: return TreeNode(pre[0]) target = pre[0] for i in range(0,len(tin)): if tin[i] == target: root = TreeNode(target) root.left = self.reConstructBinaryTree(pre[1:i+1],tin[:i]) root.right = self.reConstructBinaryTree(pre[i+1:],tin[i+1:]) return root

leetcode94. 二叉树的中序遍历

。_饼干妹妹 提交于 2020-03-06 01:11:52
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { class ColorNode { TreeNode node ; String color ; public ColorNode ( TreeNode node , String color ) { this . node = node ; this . color = color ; } } public List < Integer > inorderTraversal ( TreeNode root ) { if ( root == null ) return new ArrayList < Integer > ( ) ; List < Integer > res = new ArrayList < > ( ) ; Stack < ColorNode > stack = new Stack < > ( ) ; stack . push ( new ColorNode ( root , "white" ) ) ; while ( ! stack

二叉树遍历的递归与非递归实现(python)

只愿长相守 提交于 2020-03-05 16:32:31
最近在刷leetcode时,刷到了二叉树中序遍历的题目,所以特在此记录一下,下面我将给出中序遍历的递归实现和非递归(迭代)实现的代码与算法思想: 1. 中序遍历的递归实现: 1 class TreeNode(object): 2 def __init__(self, x): 3 self.val = x # 节点存储的值 4 self.left = None # 左子节点 5 self.right = None # 右子节点 6 7 class solution: 8 def __init__(self): 9 self.__result_list = list() # 存放中序遍历结果的集合 10 def inorder_traversal(self, root : TreeNode) -> list: 11 if root == None: return # 判断节点是否为空 12 self.inorder_traversal(root.left) # 递归遍历左子树 13 self.__result_list.append(root.val) # 将节点的值存放到集合中 14 self.inorder_traversal(root.right) # 递归遍历右子树 15 return self.__result_list # 返回集合 递归实现的算法思想:先中序遍历左子树

LintCode-73.前序遍历和中序遍历树构造二叉树

喜夏-厌秋 提交于 2020-03-05 12:40:58
前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / 1 3 标签 二叉树 code /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { /** *@param preorder : A list of integers that preorder traversal of a tree *@param inorder : A list of integers that inorder traversal of a tree *@return : Root of a tree */ public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { // write your code here TreeNode

原生JS实现二叉搜索树(Binary Search Tree)

久未见 提交于 2020-03-05 09:53:30
1.简述 二叉搜索树树(Binary Search Tree) ,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 2.代码说明 首先先创建一个辅助节点类Node,它初始化了三个属性:节点值,左孩子,有孩子。 class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } } 接着创建一个二叉搜索树类BST,它初始化了根节点为null。 class BST { constructor() { this.root = null; } } 然后,给这个BST类声明一些方法: insert(value):向树中插入一个节点值为value的节点。 midOrderTraverse(callback):中序遍历树,并将树中的每个节点传入callback回调函数里。 preOrderTraverse(callback):前序遍历树,并将树中的每个节点传入callback回调函数里。 lastOrderTraverse(callback):后序遍历树,并将树中的每个节点传入callback回调函数里。

alicode35

匆匆过客 提交于 2020-03-05 06:37:37
1 package solution35; 2 3 import java.util.LinkedList; 4 5 public class Solution { 6 public LinkedList<Integer> list = new LinkedList<Integer>(); 7 public void inOrder(TreeNode root){ 8 if(root != null){ 9 if(root.left != null){ 10 inOrder(root.left); 11 } 12 this.list.add(root.val); 13 if(root.right != null){ 14 inOrder(root.right); 15 } 16 } 17 18 } 19 public int solution(TreeNode root) { 20 this.inOrder(root); 21 int n = list.size(); 22 return list.get(n-2); 23 } 24 } 算法思路:二叉树遍历(中序遍历)。 二叉搜索树的中序遍历是有序的。 来源: https://www.cnblogs.com/asenyang/p/12418159.html