給定一棵二叉樹的前序遍歷和中序遍歷,求其後序遍歷
#include <stdio.h> #include <string.h> struct Node{ Node *lChild; Node *rChild; char c; }Tree[50]; //靜態記憶體分配陣列 int loc; //靜態陣列中已經分配的結點個數 Node *creat() { Tree[loc].lChild = Tree[loc].rChild = NULL; return &Tree[loc++]; } char str1[30],str2[30]; void postOrder(Node *T) { if(T->lChild != NULL) { postOrder(T->lChild); } if(T->rChild != NULL) { postOrder(T->rChild); } printf("%c",T->c); } Node *build(int s1,int e1,int s2,int e2) { Node *ret = creat(); ret->c = str1[s1]; int rootIdx; for(int i = s2;i <= e2;i++) { if(str2[i] == str1[s1]) { rootIdx = i; break; } } if(rootIdx != s2) { ret->lChild = build(s1 + 1,s1 + (rootIdx - s2),s2,rootIdx - 1); } if(rootIdx != e2) { ret->rChild = build(s1 + (rootIdx - s2) + 1,e1,rootIdx + 1,e2); } return ret; } int main() { while(scanf("%s",str1) != EOF) { scanf("%s",str2); loc = 0; int L1 = strlen(str1); int L2 = strlen(str2); Node *T = build(0,L1 - 1,0,L2 - 1); postOrder(T); printf("\n"); } return 0; }
相關推薦
給定一棵二叉樹的前序遍歷和中序遍歷,求其後序遍歷
#include <stdio.h> #include <string.h> struct Node{ Node *lChild; Node *rChild; char c; }Tree[50]; //靜態記憶體分配陣
給定一棵二叉樹,和一個數值。求二叉樹的路徑和等於給定值的所有路徑
判斷是否有路徑 bool hasPathSum(TreeNode *root, int sum) { if(root==NULL) return false; sum-=root->val;
leetcode--maximum-depth-of-binary-tree(給定一棵二叉樹,找出它的最大深度)
給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,1
Swift根據先序和中序確定一棵二叉樹
先序:12453687 後序:42518637 // // TreeNode.swift // Swift-Algorithm // // Created by Seven on 2018/10/19. // Copyright © 2018年 seven.
以二叉連結串列的方式建立一棵二叉樹,並以非遞迴演算法中序輸出;計算二叉樹的繁茂度,並判斷二叉樹是否為完全二叉樹
以二叉連結串列的方式存二叉樹,輸入時要以先序方式輸入,其中,空子樹用#表示。 二叉樹的繁茂度定義為其高度乘其每層結點最大值。演算法為先用遞迴演算法求二叉樹高度:其高度為左右子樹最大值加1,所以用先序遍歷,定義ld與rd分別為左右子樹高度,最後返回其較大值加1即可。二叉樹寬度
先序建立一棵二叉樹(C語言)
後記:最近在看一本書,是紅衣教主周鴻禕寫的《我的網際網路方法論》,他講到了網際網路的本質——Free,沒錯,就是免費,Internet這條資訊高速公路不僅僅需要哪些專業人士去建造,而且需要我們每一個人來貢獻出一些東西,我們需要站在巨人的肩膀上去眺望未來,程式設計也是這樣,不要刀耕火種,我們需要交流,相互交流,
二叉連結串列建立一棵二叉樹並進行前中後序遍歷
原始碼:#include<iostream>using namespace std;typedef char Datatype;struct TNode{ Datatype data; TNode* rchild; TNode* lchild;}
C++ 推斷一棵二叉樹是否對稱
ack iostream 們的 log data 簡單 src -a nbsp 一棵二叉樹對稱,就是說它假設以根為軸,翻轉過去一樣。例如以下圖所看到的,以虛線為軸。把左邊翻轉到右邊,各頂點及頂點中的值一一相應。
[LeetCode] Trim a Binary Search Tree 修剪一棵二叉樹
imm res all ret bsp search root nts aries Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree s
判斷一棵二叉樹是否為二叉排序樹
truct bool 結點 i++ true 源代碼 flag brush %d 判斷二叉排序樹的代碼如下: static boolean IsSearchTree(Bitree *t) { if(!t) //空二叉樹情況 return
兩種遍歷方式可以唯一確定一棵二叉樹嗎?
按照資料結構課本上的說法: 前序遍歷+中序遍歷 後序遍歷+中序遍歷 可以唯一確定一棵二叉樹。 反例: 1 &nbs
判斷一棵二叉樹是否為另一棵二叉樹的子結構(JAVA版本)
分析:判斷root1是否為root2的子樹?首先,必須先找到樹1中與樹2的根節點相同的節點,然後判斷從該節點開始root1中是否root2的結構;若有,則返回true,若沒有,則返回false?答案是No! 因為二叉樹root1中可能含有值相同的節點,所以,如果沒有找到,就需要繼續遍歷root1.
劍指offer:輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 //後續遍歷二叉樹,遍歷過程中求子樹高度,判斷是否平衡 class Solution { public: bool IsBalanced(TreeNode *root, int & dep){
如何遍歷一棵二叉樹?
二叉樹的遍歷分為三種:前序遍歷 中序遍歷 後序遍歷 前序遍歷:按照“根左右”,先遍歷根節點,再遍歷左子樹 ,再遍歷右子樹 中序遍歷:按照“左根右“,先遍歷左子樹,再遍歷根節點,最後遍歷右子樹 後續遍歷:按照“左右根”,先遍歷左子樹,再遍歷右子樹,最後遍歷根節點 其中前
【資料結構週週練】020 利用遞迴判斷一棵二叉樹是否為二叉排序樹
一、二叉排序樹 二叉排序樹可以說是資料結構中相當重要的內容之一啦,前兩次給大家講了二叉排序樹的建立、遍歷與查詢。今天給大家分享的是二叉排序樹的應用,判斷一個二叉樹是否為一棵二叉排序樹。 二叉排序樹的特點大家都知道,左子樹根結點值<根結點<右子樹根結點值,並且中
重建一棵二叉樹
根據先序,中序重建一棵二叉樹; 思路:中序確定根節點,遞迴到葉子,在回溯建樹 程式碼: #include <iostream> #include <assert.h> using namespace std; typedef char Datatype; stru
《劍指offer》把一棵二叉樹列印成多行
注:此部落格不再更新,所有最新文章將發表在個人獨立部落格limengting.site。分享技術,記錄生活,歡迎大家關注 題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 im
複製一棵二叉樹的非遞迴演算法
二叉連結串列型別定義: typedef char TElemType; // 設二叉樹的元素為char型別 typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild; } BiT
C++作業:將左右孩子互換 / 複製一棵二叉樹
/* 邵發, 1309班, */ /* 12周作業 練習1:編寫遞迴演算法、將左右孩子互換 (用遞迴) 練習2:編寫複製一棵二叉樹 (不用遞迴) */ #include <stdio.h> // 定義節點 struct Node { int val
《牛客網劍指offer38題》輸入一棵二叉樹,求該樹的深度
題目:輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 結果:牛客網編譯通過 思路及程式碼: //中心思想就是遞迴遍歷一遍二叉