二叉樹 知道其他兩種遍歷方式求另一種
已知先序和中序
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int prel=preorder.size(); int in=inorder.size(); return suan(preorder,0,prel-1,inorder,0,in-1); } TreeNode* suan(vector<int>& preorder,int ps,int pe, vector<int>& inorder,int is,int ie) { if(ps==pe) return new TreeNode(preorder[ps]); if(is>ie||ps>pe) return NULL; TreeNode* root = new TreeNode(preorder[ps]); int i=is; while(i<=ie) { if(inorder[i]==preorder[ps]) break; i++; } int len=i-is; root->left=suan(preorder,ps+1,ps+len,inorder,is,is-1+len); root->right=suan(preorder,ps+1+len,pe,inorder,is+len+1,ie); return root; } };
已知後序和中序
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int io=inorder.size(); int po=postorder.size(); return suan(inorder,0,io-1,postorder,0,po-1); } TreeNode* suan(vector<int>& inorder,int is,int ie, vector<int>& postorder,int ps,int pe) { if(is==ie) return new TreeNode(inorder[is]); else if(is>ie) return NULL; TreeNode* root = new TreeNode(postorder[pe]); int i=is; while(i<=ie) { if(inorder[i]==postorder[pe]) break; i++; } int len=i-is; root->left=suan(inorder,is,is+len-1,postorder,ps,ps-1+len); root->right=suan(inorder,is+1+len,ie,postorder,ps+len,pe-1); return root; } };
相關推薦
二叉樹 知道其他兩種遍歷方式求另一種
已知先序和中序 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *
利用棧結構實現二叉樹的非遞迴遍歷,求二叉樹深度、葉子節點數、兩個結點的最近公共祖先及二叉樹結點的最大距離
原文地址:http://blog.csdn.net/forbes_zhong/article/details/51227747 利用棧實現二叉樹的非遞迴遍歷,並求二叉樹的深度、葉子節點數、兩個節點的最近公共祖先以及二叉樹結點的最大距離,部分參考《劍指offer》這本書
資料結構-二叉樹基礎題目小結(遍歷,求節點數目等等)
給定一個前序序列陣列構造一個二叉樹 思路:首先序列中要有給定的非法值,也就是二叉樹中對應的空節點;對於構造一個二叉樹可以使用遞迴的思想:先構造當前節點,再構造左子樹,再右子樹,直到遇到非法值時
二叉樹相關演算法——建立、遍歷、求深度和廣度
二叉樹相關的演算法,遍歷使用了遞迴和迭代兩種演算法,可作為結果對比。 理解起來不難,直接上程式碼,有空再補下注釋說明原理。 package com.junyang.algodemo.Tree; import java.util.LinkedList; im
二叉樹的建立與各種遍歷方式
#include<cstdlib> #include<string> #include<iostream> #include<cmath> #include<cstring> #include<algorit
二叉樹 已知 兩種遍歷序列 求第三種遍歷序列
已知 前序和中序遍歷 求後序遍歷序列 struct node *creat(char *a, char *b, int n) { struct node *ptr; char
數據結構與算法第10周作業——二叉樹的創建和遍歷算法
技術分享 truct order traverse eof 結構 後序遍歷 lib void 一、二叉樹的創建算法(遞歸方式) 二、二叉樹的先序、中序和後序遍歷算法 #include<stdio.h>#include<stdlib.h>typedef
數據結構-第10周作業(二叉樹的創建和遍歷算法)
樹的創建 創建 -1 數據結構 二叉 分享 com jpg 遍歷算法 數據結構-第10周作業(二叉樹的創建和遍歷算法)
七:重建二叉樹(依據先序遍歷(或者後序遍歷)和中序遍歷重建二叉樹)
off 相同 tree int roo 節點 先序 throw -a 對於一顆二叉樹。能夠依據先序遍歷(或者後序遍歷)和中序遍歷(樹中不含反復的數字)又一次還原出二叉樹。 解析: 1. 先序遍歷序列的第一個元素必然是根節點,能夠由此獲取二叉樹的根節點。 2. 依
二叉樹的創建、遍歷、判斷子二叉樹
stat 技術 get sys 找到 btree gif public str 1、二叉樹節點類 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right
二叉樹的創建、遍歷、查找、刪除
遞歸 瀏覽器 nod 刪除 reac 二叉樹的遍歷 初始化 後序遍歷 lba 一、二叉樹的基本概念 一棵非空的二叉樹由根結點及左、右子樹這三個基本部分組成。如下圖: 數字8為根節點,1、4、7、13為葉子節點,8的左邊為左子樹,數值都比根節點8小,右邊為右子樹,數值
二叉樹的非遞歸遍歷
std 是否 分配 printf 棧空間 str nco 結束 oid 全部代碼 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <assert.h> 4
記錄一下關於二叉樹的非遞歸遍歷
printf order type typedef print 課本 pos else if post 利用棧的非遞歸先序遍歷二叉樹: 額,這個是我自己寫的,可能算法有點啰嗦…… /********** 【題目】試利用棧及其基本操作寫出二叉樹T的非遞歸 的先序遍歷算法。
103 Binary Tree Zigzag Level Order Traversal 二叉樹的鋸齒形層次遍歷
bsp size light emp == push 鋸齒形 .com null 給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。例如:給定二叉樹 [3,9,20,null,null,15,7],
二叉樹的創建和遍歷
二叉樹 遍歷 #include<stdio.h> #include<stdlib.h> typedef struct Tree{ char data; struct Tree *lchild; struct Tree *rchild; }BTree; v
leetcode 103. 二叉樹的鋸齒形層次遍歷
push_back clas 層次遍歷 返回 urn null leetcode div order 給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。 例如:給定二叉樹 [3,9,20,null,nul
UVa 122 Trees on the level(鏈式二叉樹的建立和層次遍歷)
構建 void target .net color 鏈接 struct failed div 題目鏈接: https://cn.vjudge.net/problem/UVA-122 1 /* 2 問題 3 給出每個節點的權值和路線,輸出該二叉樹的層次遍歷序列。
二叉樹的常見建立和遍歷
#include <stdio.h> #include <stdlib.h>> const int MAX=20; typedef struct Node { char data; struct Node*lchild; struct Node*rchild
二叉樹建立、先序遍歷、中序遍歷、後序遍歷、樹深度
一、概念: 二叉樹遍歷:按指定的某條搜尋路徑訪問樹中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。 根節點N,按照先遍歷左子樹L再遍歷右子樹R的原則,常見的有三種:先
二叉樹的非遞迴遍歷和層次遍歷
資料結構 struct node{ int val; node *lchild,*rchild; }; 先序非遞迴遍歷 1) 訪問結點p,並將結點P入棧; 2) 判