1. 程式人生 > >二叉排序樹_求二叉樹的高度

二叉排序樹_求二叉樹的高度

如果定義一顆二叉樹的高度就是從根到葉子的最長距離。試編碼求二叉樹的高度。


其實,二叉樹的高度就是它的左子樹和右子樹中高度最大值 + 1


另外考慮: 當待排序的資料本來就是有序的情況,會發生什麼?


請參考《資料結構》教材解決這個問題。

class BiTree {
	private int data;
	private BiTree left;
	private BiTree right;

	public BiTree(int x) {
		data = x;
	}
	
	//小的數放左邊,大的數放右邊
	public void add(BiTree t) {
		if (t.data < this.data) {
			if (left == null) {
				left = t;
			} else {
				left.add(t);
			}
		} else {
			if (right == null) {
				right = t;
			} else {
				right.add(t);
			}
		}
	}
	//中序遍歷,先左子樹,再自身,再右子樹
	//遞迴思想
	public void travel() {
		if (left != null) {
			left.travel();
		}
		System.out.print(data+" ");
		if (right != null) {
			right.travel();
		}
	}
	
	//求高度
	//遞迴思想
	public int height(){
		int treeHeight = 0;
		int leftHeight,rightHeight;
		if(this == null){
			return 0;
		}else{
			leftHeight = (left == null? 0:left.height());
			rightHeight = (right == null? 0:right.height());
			treeHeight = Math.max(leftHeight, rightHeight);
			return 1+treeHeight;
		}
	}
}

public class My1 {
	public static void main(String[] args) {
		BiTree t = new BiTree(12);
		t.add(new BiTree(9));
		t.add(new BiTree(5));
		t.add(new BiTree(8));
		t.add(new BiTree(15));
		t.add(new BiTree(20));
		t.add(new BiTree(11));

		t.travel();//遍歷
		
		System.out.println();
		System.out.println("樹的高度是:"+t.height());
	}
}
Conclusion
5 8 9 11 12 15 20 
樹的高度是:4

當排序資料自身就是有序的時,這個佇列元素的個數即二叉樹的高度

相關推薦

排序_高度

如果定義一顆二叉樹的高度就是從根到葉子的最長距離。試編碼求二叉樹的高度。 其實,二叉樹的高度就是它的左子樹和右子樹中高度最大值 + 1 另外考慮: 當待排序的資料本來就是有序的情況,會發生什麼?請參考《資料結構》教材解決這個問題。 class BiTree { pri

資料結構_中度為0,為1,為2的節點的個數以及所有節點個數

int NumberOfZeroDegree(BTNode *T)//求二叉樹中度為0的節點個數  {     int i=0;     if(NULL != T)     {             if(NULL==T->lchild  && NULL==T->rchild)

高度和葉子結點數量

演算法程式碼很簡單都是用使用遞迴計算,大家把遞迴思想領悟到就ok了。 二叉樹高度演算法 //求二叉樹的高度 採用遞迴的方式 void GetHeight(BiTree tree, int* heigh

BZOJ_3589_動態_容斥原理+鏈剖分

query using mod mask tin 容斥原理 urn con pos BZOJ_3589_動態樹_容斥原理+樹鏈剖分 題意: 維護一棵樹,支持1.子樹內點權加上一個數 2.給出k條鏈,求路徑上的點權和(重復的計算一次) (k<=5) 分析:

BZOJ_3685_普通van Emde Boas_權值線段

true fread sam desc include 代碼 ID 權值線段樹 class BZOJ_3685_普通van Emde Boas樹_權值線段樹 Description 設計數據結構支持: 1 x 若x不存在,插入x 2 x 若x存在,刪除x

資料結構__赫夫曼及赫夫曼編碼_C++實現

#include<iostream> #include<stack> using namespace std; class NODE { public: NODE(); int weight,parent,lchild,rchild; }; NODE::NODE() { we

LCA】剖知識點

不太優美但是有註釋的版本: #include<cstdio> #include<iostream> using namespace std; struct edge{ int to,ne; }e[1000005]; int n,m,s,ecnt,head[500005]

程式設計基礎79 給定排序結構和陣列整棵

1099 Build A Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: T

程式設計實戰_葉子節點數目

統計二叉樹中葉子結點的個數: 葉子節點:沒有孩子節點的樹 demo.cpp #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #includ

基礎操作 ,前中後序遍歷,高度搜尋排序)Java實現 程式碼集合

首先,定義一個樹類Tree.java public class Tree { public TreeNode root; } 定義樹節點類TreeNode.java public class TreeNode { public TreeNode(int

結點數位n的 排序個數

利用動態規劃的思想 設S(n)為情況數 S(0) = S(1) = 1 S(2) = 2 S(3) = S(0)*S(2)  + S(1)*S(1) + S(2)*S(0) S(4) = S(0)*S(3) + S(1)*S(2) + S(2)*S(1) + S(3)*

建立排序_三種順序遍歷

str 空格 -- 一行 amp oot std new clu 題目描述 輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。 輸入描述: 輸入第一行包括一個整數n(1<=n<=100)。 接下來的一行包括n個整數。 輸出描述: 可能有多組測試數據,對

排序

sans insert -a put 定義 n) include 先序 min Time Limit: 1000MS Memory limit: 65536K 題目描寫敘述 二叉排序樹的定義是:或者是一棵空樹。或者是具有下列性質的二叉樹: 若它的左子樹不空,

排序的插入與刪除

else post 相等 大於 truct art parent node -m 二叉排序樹的插入與刪除可能會破壞二叉排序樹的性質,如今要求插入和刪除操作保持其性質 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上全部結點的

(11)----的鏡像,遞歸和非遞歸方式

temp right 二叉樹 -a data nbsp rac art urn 1、二叉樹定義: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; type

數據結構與算法問題 排序

geo post adding ng- spa main 排序樹 ack word 題目描寫敘述: 二叉排序樹,也稱為二叉查找樹。能夠是一顆空樹。也能夠是一顆具有例如以下特性的非空二叉樹: 1. 若左子樹非空,則左

排序 C++

二叉查找樹 {} 刪除元素 one dem trees system arc oid 二叉排序樹(Binary Sort Tree),又稱二叉查找樹。 1、若左子樹不為空,則左子樹上所有結點的值均小於他的根結構的值; 2、若右子樹不為空,則右子樹上所有結點的值均大於他的根結

中任意兩個結點的距離

case itl wid get ren return roo [] fall 求二叉樹中任意兩個結點的距離實現步驟:計算跟到第一個結點的距離;計算跟到第二個結點的距離;計算lca;計算跟到lca結點的距離;結果為(1) + (2) - 2 * (4),因為重復計算了兩次的

C語言——排序

pre span ren 二叉 == nbsp stdio.h spa int 二叉排序樹是一種實現動態查找的樹表,又稱二叉查找樹。 二叉排序樹的性質: 1. 若它的左子樹不為空,則左子樹上所有節點的鍵值均小於它的根節點鍵值 2. 若它的右子樹不為空,則右子樹上所有節

排序和平衡的關系

fill 樹的高度 == eight font 關系 avl樹 avi 等於   二叉排序樹: 二叉排序樹又稱二叉查找樹,亦稱二叉搜索樹。 二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根節點的值; (2)若右子