根據前序和中序遍歷重建二叉樹

2021-08-07 06:17:03 字數 1126 閱讀 6518

#include "stdafx.h"

#include #include #include using namespace std;

/* 重建二叉樹

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹.

假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字.例如

輸入前序遍歷序列和中序遍歷序列,

則重建出圖所示的二叉樹並輸出它的頭結點。二叉樹結點的定義如下:

*/struct binarytreenode

;binarytreenode* constructconre(int* startpreorder,int* endpreorder,int* startinorder,int* endinorder)

//在中序遍歷中找到根結點的值

int* rootinorder = startinorder;

while(rootinorder <= endinorder&& *rootinorder !=rootvalue)

++ rootinorder;

if(rootinorder ==endinorder && *rootinorder != rootvalue)

throw std::exception("invalid input.");

int leftlength = rootinorder - startinorder;

int *leftpreorderend = startpreorder +leftlength;

if(leftlength >0)

if(leftlengthm_pright = constructconre(leftpreorderend +1,endpreorder,rootinorder+1,endinorder);

}return root;

}binarytreenode* construct(int *preorder,int* inorder,int length)

return constructconre(preorder,preorder+length-1,inorder,inorder+length-1);

}int _tmain(int argc, _tchar* argv)

根據前序遍歷和中序遍歷重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class treenode public class s2 public treenode reconstruct int pre...

根據前序遍歷和中序遍歷重建二叉樹

package com.study 根據二叉樹的前序遍歷和中序遍歷結果重建二叉樹 並輸出其頭節點。假設前序遍歷和中序遍歷結果中沒有重複數字 前序遍歷序列 中序遍歷序列 class treenode public class suanfa4 private static int arr2 public...

根據前序和中序遍歷結果重建二叉樹

前序遍歷 根節點 左子樹 右子樹 中序遍歷 左孩子 根節點 右子樹 根據前序遍歷的特性可以得知 1.前序遍歷後的第乙個節點就是這棵樹的根節點。2.根據中序遍歷找到根節點後,其左邊的節點都是根節點的左子樹,其右邊的節點都是根節點的右子樹。3.用遞迴的方式將根節點的左子樹和右子樹分別看成是一棵樹。對於遞...