劍指offer 重建二叉樹

2021-10-03 08:54:37 字數 3301 閱讀 4991

1、 概念

迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器就如同乙個指標。檢查容器內元素並遍歷元素的資料型別。每種容器都定義了自己的迭代器型別。

2、 相關操作

(1) begin和end操作

如果有元素的話,由begin返回迭代器指向的第乙個元素.下列例子:如果vector不空,初始化後,iter即指向鈣元素為iver[0]

vector::iterator iter = iver.begin();

由end操作返回的迭代器指向vector的「末端元素的下乙個」由end操作返回的迭代器並不指向vector中任何實際的元素,相反,他只是起乙個哨兵的作用,表示我們已經處理完vector中所有元素。

(2) vector迭代器的自增和解引用運算

使用*訪問迭代器所指向的元素,解引用操作符返回值是乙個左值,因此可以對它進行賦值來改變他的值。*iter=2。

迭代器的自增操作和int型物件的自增操作類似。相當於「向前移動乙個位置「」」

(3) 迭代器編寫迴圈

vector::iterator it;

for(it = in.begin();it != in.end();it++)

(4) iterator的算術操作:

iterator除了進行++,–操作,可以將iter+n,iter-n賦給乙個新的iteraor物件。還可以使用乙個iterator減去另外乙個iterator.

const vector::iterator newiter = ivec.begin();

vector::iterator newiter2 = ivec.end();

cout<3、vector::const_iterator 和 const vector::iterator的區別

const vector::iterator newiter=ivec.begin();

*newiter=11; //可以修改指向容器的元素

newiter++; //迭代器本身不能被修改

4、 iterator(迭代器)模式 具體看博文iterator(迭代器)模式

題目分析:

首先我們可以明確,前序遍歷的結果是根左右,在乙個序列中第乙個元素就是root

中序遍歷的結構是左根右,根據前序遍歷選出的root,就可分出左右子樹,所以解題具體如下:

1、先求出根結點

2、將根結點帶入到中序遍歷序列中求出左右子樹的中序遍歷序列

3、通過左右子樹的中序序列元素集合帶入前序遍歷序列可以求出左右子樹的前序序列

4、左右子樹的前序序列的第乙個元素分別是根結點的左右兒子

5、求出了左右子樹的4種序列可以遞迴上述步驟

#include#includeusing namespace std;

//definition for binary tree

struct treenode

}; class solution

//定義node節點並其求根節點

int root = pre[0];

treenode* node = new treenode(root);

vector:: iterator it;

//1、求左右子樹的遍歷序列

vectorpreleft,preright,inleft,inright;

//(1)求根節點在中序遍歷序列中的位置

vector::iterator i;

for(it = in.begin();it != in.end();it++)

} //(2)求左右子樹的中序遍歷子串行

int k = 0;

for(it = in.begin(); it != in.end();it++)

else if(k == 1)

else{}

if(it == i)

} //(3).求左右子樹的前序子串行

k = 0;

vector::iterator ite;

for(it = pre.begin()+1; it != pre.end(); it++)

}if(k == 0)

k = 0;

} //根據 遍歷序列求出跟的左右節點

node->left = reconstructbinarytree(preleft,inleft);

node->right = reconstructbinarytree(preright,inright);

//返回節點位址

return node;

}};

結點結構定義如下:

typedef char elemtype;

#define end '#'

typedef struct btnode

btnode, * binarytree;

購買乙個結點

struct btnode* buynode()

1、根據前序中序構建二叉樹

int findindex(const elemtype* istr, int n, elemtype x)

} return pos;

}struct btnode* createpi(const elemtype* pstr, const elemtype* istr, int n)

return s;

}struct btnode* createtrespi(const elemtype* pstr, const elemtype* istr, int n)

2、根據中序後序構建二叉樹

int findindex1(const elemtype* istr, int n, elemtype x)

} return pos;

}struct btnode* createil(const elemtype* istr, const elemtype* lstr, int n)

return s;

}struct btnode* createtresil(const elemtype* istr, const elemtype* lstr, int n)

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...

《劍指offer》重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...

劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...