順序儲存二叉樹

2021-10-04 04:41:19 字數 1976 閱讀 1819

一、需求

二、分析

三、**實現

a:以陣列的形式來存放二叉樹的結點;

b:遍歷陣列時,完成對結點的前序遍歷,中序遍歷和後序遍歷;

a:給定陣列,n表示陣列的下標;

b:想象一棵樹,將樹按照層序遍歷編碼,一一對應陣列下標;

c:那麼若樹的結點編碼為n,則其左孩子編碼為2*n+1,右孩子為2*n+2, 其父結點為(n-1)/2;

/* * 需求:

* a:以陣列的形式來存放二叉樹的結點;

* b:遍歷陣列時,完成對結點的前序遍歷,中序遍歷和後序遍歷;

*

* 分析:

* a:給定陣列,n表示陣列的下標;

* b:想象一棵樹,將樹按照層序遍歷編碼,對應陣列下標;

* c:那麼若樹的結點編碼為n,則其左孩子編碼為2*n+1,右孩子為2*n+2,

* 其父結點為(n-1)/2;

*/public class arrbinarytreedemo ;

arraybinarytree abt = new arraybinarytree(arr);

system.out.println("前序遍歷:");

abt.preorder(0);

system.out.println("");

system.out.println("中序遍歷:");

abt.infixorder(0);

system.out.println("");

system.out.println("後序遍歷:");

abt.postorder(); }}

// 實現順序儲存二叉樹的類

class arraybinarytree

/*** 這個方法是實現前序遍歷

* * @param index

* 陣列的下標

*/public void preorder(int index)

// 輸出當前結點

system.out.print(arr[index] + " ");

// 遞迴左子結點

if (arr.length > 2 * index + 1)

// 遞迴右子結點

if (arr.length > 2 * index + 2)

} /**

* 這個方法是實現中序遍歷

* * @param index

* 陣列的下標

*/public void infixorder(int index)

// 遞迴左子結點

if (arr.length > 2 * index + 1)

// 輸出當前結點

system.out.print(arr[index] + " ");

// 遞迴右子結點

if (arr.length > 2 * index + 2)

} /**

* 這個方法過載postorder,目的是提高可讀性

*/public void postorder()

/*** 這個方法是實現後序遍歷

* * @param index

* 陣列的下標

*/public void postorder(int index)

// 遞迴左子結點

if (arr.length > 2 * index + 1)

// 遞迴右子結點

if (arr.length > 2 * index + 2)

// 輸出當前結點

system.out.print(arr[index] + " ");

}}

順序儲存二叉樹

從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列,看下面的示意圖。順序二叉樹通常只考慮完全二叉樹 第n個元素的左子節點為 2 n 1 第n個元素的右子節點為 2 n 2 第 n 個元素的父節點為 n 1 2 n 表示二叉樹中的第幾個元素 按 0 開始編號...

順序儲存二叉樹

從資料儲存來看,陣列儲存方式和樹的儲存方式可以相互轉換,即陣列可以轉換成樹,樹也可以轉換成陣列。陣列轉換成樹即是將陣列中的各個元素按照二叉樹的層次儲存起來的過程。原陣列 1,2,3,4,5,6,7 轉換為順序二叉樹如下圖所示 順序儲存二叉樹的特點 通常只考慮完全二叉樹 第n個元素的左子節點為2 n ...

順序儲存二叉樹

package com.datastructure.tree.binarytree 順序儲存二叉樹 1。順序儲存二叉樹通常只考慮完全二叉樹 2。第n個元素的左子節點為2 n 1 3。第n個元素的右子節點為2 n 2 4。第n個元素的父親節點為 n 1 2 public class sequentia...