二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。
二叉樹遍歷,就是按一定的規則和順序走遍二叉樹的所有結點,使每乙個結點都被訪問一次,而且只被訪問一次。設l、d、r分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種情況:dl(稱為前序遍歷),ldr(稱為中序遍歷),lrd (稱為後序遍歷)。
用模擬二叉樹實現增刪改查等方法。採用中序遍歷,二叉樹具有排序功能。
/**
* 索引樹(有序二叉樹)
*/public class mytree
private node root;//根節點
/*** 新增資料
* @param data 要新增的資料
*/public void add(object data)
//新增資料
//1.建立節點
node node = new node();
//2.把資料放入節點中
node.data = data;
//3.找父節點
if (root == null) else else }}
/*** 列印樹中的資料
*/public void print()
/*** 中序查詢並列印節點
* @param node 節點
*/private void see(node node)
}/**
* 查詢新增資料的父節點
* @param startnode 起始節點
* @param data 要新增的資料
* @return 新增資料的父節點
*/private node findparent(node startnode,object data) else
}return parent;
}/**
* 查詢資料所在的節點
* @param data 要查詢的資料
* @return 資料所在的節點
*/private node findnode(object data)else else else
return c1.compareto(c2);
}/**
* 刪除節點
* @param data 要刪除的資料
*/public void remove(object data)
//刪除節點
if (deletenode == root) else if (deletenode.left != null && deletenode.right == null)else if (deletenode.left == null && deletenode.right != null) else if (deletenode.left != null && deletenode.right != null)
}else else
}else if (deletenode.left != null && deletenode.right == null) else
}else if (deletenode.left == null && deletenode.right != null) else
}else if (deletenode.left != null && deletenode.right != null) else }}
}/**
* **二叉樹,left保留,right放到left最右邊,返回left
* @param node 要刪除的節點
* @return 刪除節點的left節點
*/private node split(node node)
}
測試自定義二叉樹增刪等方法。
/**
* 測試二叉樹
*/public class testtree
}
資料結構(八)二叉樹遍歷
二叉樹是一種樹形結構,遍歷就是要讓樹中的所有節點被且僅被訪問一次,即按一定規律排列成乙個線性佇列。二叉 子 樹是一種遞迴定義的結構,包含三個部分 根結點 n 左子樹 l 右子樹 r 根據這三個部分的訪問次序對二叉樹的遍歷進行分類,總共有6種遍歷方案 nlr lnr lrn nrl rnl和lnr。研...
資料結構 八 二叉排序樹
基本操作 建立bst 查詢 插入乙個節點 中序遍歷 將得到遞增序列 刪除乙個節點 include include include pragma warning disable 4996 typedef struct mybst bst bst create 建立bst bst insert bst ...
資料結構(八)二叉堆 及排序
以下是我學習二叉堆的總結 include include 時間複雜度 o log n 空間複雜度 o 1 int tree 和 int size 合起來表示裝堆的值的陣列 int rootidx 表示要調整的結點的下標 向下調整的 void adjustdown int tree,int size,...