演算法與資料結構基礎(三)之二叉樹

2021-09-19 10:37:41 字數 2359 閱讀 7008

1 、二叉樹節點

2、建立二叉樹節點

3、連線樹節點

4、列印樹節點

5、列印二叉樹

6、銷毀二叉樹

7、求二叉樹的深度

已知中序遍歷、後序遍歷、求前序遍歷。

已知前序遍歷、中序遍歷,求後序遍歷。

參考文獻

二叉樹是n(n>=0)個結點的有限集合,該集合或者為空集(稱為空二叉樹),或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹組成。

由二叉樹定義以及圖示分析得出二叉樹有以下特點:

1)每個結點最多有兩顆子樹,所以二叉樹中不存在度大於2的結點。

2)左子樹和右子樹是有順序的,次序不能任意顛倒。

3)即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹。

1)在二叉樹的第i層上最多有2i-1 個節點 。(i>=1)

2)二叉樹中如果深度為k,那麼最多有2k-1個節點。(k>=1)

3)n0=n2+1 n0表示度數為0的節點數,n2表示度數為2的節點數。

4)在完全二叉樹中,具有n個節點的完全二叉樹的深度為[log2n]+1,其中[log2n]是向下取整。

5)若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意乙個編號為 i 的結點有如下特性:

(1) 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號為 [i/2] 的結點為其雙親結點;

(2) 若 2i>n,則該結點無左孩子, 否則,編號為 2i 的結點為其左孩子結點;

(3) 若 2i+1>n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子結點。

struct binarytreenode

;

binarytreenode* createbinarytreenode(int value)

void connecttreenodes(binarytreenode* pparent, binarytreenode* pleft, binarytreenode* pright)

}

void printtreenode(const binarytreenode* pnode)

else

printf("\n");

}

void printtree(const binarytreenode* proot)

}

void destroytree(binarytreenode* proot)

}

int treedepth(const binarytreenode* proot)

#include#includeusing namespace std;

string s1, s2;

void print(int l1, int r1, int l2, int r2)

} //cout<<"k "

#include #include using   namespace   std;

struct treenode

};treenode * reconstructbinarytree(vectorpre, vectorin)

else if (j > i)

}root->left = reconstructbinarytree(pre_left, in_left);

root->right = reconstructbinarytree(pre_right, in_right);

return root;

}void print(vector&vec)

cout << endl; }}

void postorder(treenode* root) //後續遍歷

return;

}int main()

; vectorin = ;

cout << "前序遍歷為:" << endl;

print(pre);

cout << "中序遍歷為:" << endl;

print(in);

treenode* root = reconstructbinarytree(pre, in);

cout << "後序遍歷為:" << endl;

postorder(root);

system("pause");

return 0;

}

參考文章:

**參考:

資料結構之二叉樹基礎三

include include include include include include include include using namespace std struct btnode typedef struct btnode 重建二叉樹 1 用前序序列的第乙個結點作為根結點 2 在中序...

資料結構演算法基礎 之 二叉樹

樹節點 public class node public int getnum public node getleft public node getright public void setnum int num public void setleft node left public void ...

資料結構與演算法之二叉樹

樹同時具有鍊錶和陣列的優點,關於樹的術語有 根 樹頂端的節點 葉子節點 沒有子節點的節點 樹那個節點所對應的資料結構 節點物件類,包含資料 public class node 將資料插到樹中 public void inser int id,double dd public boolean dele...