1. 程式人生 > >二叉樹基礎操作

二叉樹基礎操作

rep unsigned signed ace 輸出 nod inf dtree bit

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define
INF 0x3f3f3f3f3f3f3f3f #define pii pair<int,int> #define pdd pair<double,double> #define pdi pair<double,int> #define mp(u,v) make_pair(u,v) #define sz(a) a.size() #define ull unsigned long long #define ll long long #define pb push_back #define PI acos(-1.0) const int mod = 1e9+7; const
int maxn = 1e3+5; const double EPS = 1e-6; using namespace std; struct node{ int v,sum; }tree[2*2*maxn]; int a[maxn]; int n; void buildtree(int k){ if(k>n) return; tree[k].v=a[k]; buildtree(k<<1); buildtree((k<<1)+1); tree[k].sum=tree[(k<<1)].v+tree[(k<<1
)+1].v; } void xianxu1(int k){//先序輸出(遞歸) if(tree[k].v==0) return; printf("%d ",tree[k].v); xianxu1(k<<1); xianxu1((k<<1)+1); } void xianxu2(){//先序輸出(非遞歸) stack<int> st; st.push(1); int k=1; while(st.size()){ while(tree[k].v!=0){ printf("%d ",tree[k].v); if(tree[2*k].v!=0||tree[2*k+1].v!=0) st.push(k); k=2*k; } k=st.top(); k=2*k+1; st.pop(); // if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v); } } void zhongxu1(int k){//中序輸出(遞歸) if(tree[k].v==0) return; zhongxu1(k<<1); printf("%d ",tree[k].v); zhongxu1((k<<1)+1); } void zhongxu2(){//中序輸出(非遞歸) stack<int> st; st.push(1); int k=1; while(st.size()||tree[k].v!=0){ while(tree[k].v!=0){ //printf("%d ",tree[k].v); // if(tree[2*k].v!=0||tree[2*k+1].v!=0) { // de(k); // st.push(k); // } if(k!=1) st.push(k); k=2*k; } k=st.top(); //de(k); printf("%d ",tree[k].v); k=2*k+1; st.pop(); // if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v); } } void houxu1(int k){//後序輸出(遞歸) if(tree[k].v==0) return; houxu1(k<<1); houxu1((k<<1)+1); printf("%d ",tree[k].v); } int main() { mt(tree,0); scanf("%d",&n); rep(i,1,n+1) scanf("%d",a+i); buildtree(1); // rep(i,1,n+1) printf("%d ",tree[i].v); // xianxu1(1); // cout<<endl; // xianxu2(); // zhongxu1(1); // cout<<endl; // zhongxu2(); houxu1(1); return 0; } /* 本篇代碼記錄的是二叉樹的數組建樹,和先序輸出(遞歸和非遞歸),中序輸出(遞歸和非遞歸),還有後序輸出(遞歸) */

二叉樹基礎操作