8 二叉樹遍歷

2021-07-11 07:30:24 字數 2704 閱讀 3321

typedef struct node node;

node *root;

先序遍歷:

dlr(node *root )

}

中序遍歷:

ldr(node *root)

}

後序遍歷:

lrd (node *root)

}

通過先序遍歷和後序遍歷確定不了乙個數。

bintree createbtpre( )

return t;

}

分析1:什麼時候訪問根、什麼時候訪問左子樹、什麼訪問右子樹

當左子樹為空或者左子樹已經訪問完畢以後,再訪問根

訪問完畢根以後,再訪問右子樹。

分析2:為什麼是棧,而不是其他佇列。

先走到的後訪問、後走到的先訪問,顯然是棧結構

分析3:結點所有路徑情況

步驟1:結點的所有路徑情況

如果結點有左子樹,該結點入棧;

如果結點沒有左子樹,訪問該結點;

分析3:路徑所有情況

如果結點有右子樹,重複步驟1;

如果結點沒有右子樹(結點訪問完畢),回退,讓棧頂元素出棧,訪問棧頂元素,並訪問右子樹,重複步驟1

如果棧為空,表示遍歷結束。

注意:入棧的結點表示,本身沒有被訪問過,同時右子樹也沒有被訪問過。

分析4:有乙個一直往左走入棧的操作

#include "iostream"

#include "stack"

using namespace std;

//二叉鍊錶

typedef struct bitnode

bitnode,*bitree;

/* 1

2 3

4 5

*/bitnode *gofarleft(bitnode *t, stack&s)

//如果t有左孩子 入棧

while (t->lchild)

return t; //找到乙個沒有左孩子的節點,就是中序遍歷的起點

}void inorder2(bitnode *t)

else if (!s.empty()) //如果沒有右孩子,說明該節點的樹放完畢,需要返回。

else //如果沒有右孩子,並且棧為空 t = null;

}}void main()

二叉樹程式設計:
#include "stdlib.h"

#include "stdio.h"

#include "string.h"

//二叉鍊錶

typedef struct bitnode

bitnode, *bitree;

//三叉鍊錶

typedef struct tritnode

tritnode, *tritree;

//雙親鍊錶

#define max_tree_size 100

typedef struct bptnode

bptnode;

typedef struct bptree

bptree;

void preorder(bitnode *t)

}void inorder(bitnode *t)

}void postorder(bitnode *t)}/*

12 3

4 5

*///1 遍歷演算法 3種

//2int g_count = 0;

void countleaf(bitnode *t) //先根 }}

void countleaf2(bitnode *t, int *ncount) //先根 }}

//求樹的深度

int depth(bitnode *node)

depthl = depth(node->lchild);

depthr = depth(node->rchild);

depthval = 1 + ((depthl > depthr) ? depthl:depthr);

return depthval;

}//拷貝樹

bitnode* copytree(bitnode *t)

bitnode *newnode = null, *newlptr=null,*newrptr=null;

if (t->lchild != null)

if (t->rchild != null)

newnode = (bitnode *)malloc(sizeof(bitnode));

newnode->lchild = newlptr;

newnode->rchild = newrptr;

newnode->data = t->data;

}void main()

int dep = depth(&b1);

printf("樹的深度:%d \n", dep);

bitree *bt = copytree(&b1);

preorder(bt);

system("pause");

}

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...

二叉樹遍歷

描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...