二叉樹專題

2021-09-26 19:30:39 字數 2319 閱讀 2151

一般的樹

struct node;
node* newnode(int v)
void search(node* root, int x, int newdata)

if(root->data == x)

search(root->lchild, x, newdata);

search(root->rchild, x, newdata);

}

//注意根結點指標root要使用引用

//如果要修改二叉樹的結構,那麼就要加引用

//如果只是對結點的內容做修改或者遍歷樹,那麼不需要加引用

void insert(node* &root, int x)

if(應該插在左子樹)

else

}

node* create(int data, int n) 

return root;

}

先序遍歷
void preorder(node* root)

printf("%d",root->data);

preorder(root->lchild);

preorder(root->rchild);

}

中序遍歷
void inorder(node* root)

inorder(root->lchild);

printf("%d",root->data);

inorder(root->rchild);

}

後序遍歷
void postorder(node* root)

postorder(root->lchild);

postorder(root->rchild);

printf("%d",root->data);

}

層次遍歷
//如果需要記錄層次

struct node;

void layerorder(node* root)

if(now->rchild != null)

} }

已知二叉樹的先序遍歷、後序遍歷、層次遍歷之一和中序遍歷,可以構造出唯一的二叉樹。下面以先序遍歷和中序遍歷為例:

利用先序遍歷和中序遍歷構造二叉樹

node* create(int prel, int prer, int inl, int inr)

} int numleft = k - inl;

root->lchild = create(prel+1, prel+numleft, inl, k-1);

root->rchild = create(prel+numleft+1, prer, k+1, inr);

return root;

}

二叉樹的靜態實現
//定義 

struct nodenode[maxn];

//新建結點

int index = 0;

int newnode(int v)

//修改

void search(int root, int x, int newdata)

search(node[root].lchild, x, newdata);

search(node[root].rchild, x, newdata);

}//插入

void insert(int &root, int x)

if(應該插在左子樹)

insert(node[root].lchild, x);

else

insert(node[root].rchild, x);

}//建立二叉樹

int create(int data, int n)

return root;

}

儲存
struct nodenode[maxn];

//如果不涉及資料域,可以寫成vectorchild[maxn]

新建結點
int index = 0;

int newnode(int x)

遍歷
void preorder(int root)

}

//如果新增layer呢? 

void layerorder(int root)

} }

leetcode二叉樹專題總結(二)

1.給定乙個二叉樹,返回其節點值自底向上的層次遍歷。即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷 class solution if node.right null list.add node.val res.add 0,list 往隊頭新增 return res 2.給定乙個二叉樹,找出...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

二叉樹專題 lintcode二叉樹的層序遍歷

層序遍歷算是遍歷方式中,比較容易掌握的,實質就是寬度優先遍歷,bfs的基本 塊如下 void bfs 放到二叉樹的遍歷中來看,首先根節點入隊,根出隊,訪問根節點,再入隊左孩子,入隊右孩子 這樣再出隊時,就是訪問的第二層的左側.以此類推 我們來看看題目考察的方式 由以上的分析,容易想到先取到這一層的元...