樹的基本結構
public class treenode
}
1.構建一顆樹(本文以表示式樹為例,用字尾表示式構建,我在前一篇已近介紹了如何將中序轉換為後續表示式)
原理:利用棧。步驟:a.當前字元為字元或者數字,則直接構建乙個節點,然後入棧
b.當前字元為操作符,則在棧中取出兩個節點,將這兩個節點作為孩子節點構建一棵樹入棧
c.最後將棧中剩下的唯一節點返回,就是要構建的樹
// 構建一顆字元樹,即數學表示式
public static treenodegettree(string obj)
else
// 操作符的話,從棧中取出兩個樹節點,然後合併成乙個節點,操作符為根節點
}return stack.pop();
}
2.用先序,中序,後序
列印一顆樹,這個沒有什麼好說的
/*
* 遞迴 列印一棵樹 先序,中序,後序
*/// 先序遍歷一棵樹,(根左右)
public string printtreepreoreder(treenodenode)
return obj;
}// 中序遍歷一棵樹(左根右)
public string printtreeinfixoreder(treenodenode)
return obj;
}// 後續遍歷一棵樹(左右根)
public string printtreepostoreder(treenodenode)
return obj;
}
3.得到樹的高度(使用遞迴)
原理:樹根的高度=最大的孩子的高度+1
// 得到一棵樹額高度
public int getheight()
4.列印樹的第k層(遞迴實現)
原理:可以理解為列印根的第k層,即列印根的孩子的第k-1層,當k=0時,可以直接列印出來
// 列印一棵樹的第level層
public void printtreeatlevel(treenodenode, int level)
5.按層次列印一棵樹
我實現了兩種方法:
方法一:
知道了樹的高度,依次列印出各層的高度。但是這種方法,會在列印任何一層的時候都會從根節點開始,浪費時間
// 按照樹的格式列印一棵樹,必須按層次列印
public void printtree()
}
方法二:
用兩個佇列實現,佇列1儲存所有的同一層葉節點,佇列2儲存儲存佇列1的正在訪問的孩子節點 ,佇列1訪問完以後,將佇列2加到佇列1(此時是空佇列)中,再講佇列2清空
public void printtreebyqueue(treenoderoot)
queue1.addall(queue2);
system.out.println();
}}
Java資料結構之234樹
n叉樹簡介 每個節點只有乙個資料項,並且每個節點最多只有兩個子節點的樹稱為二叉樹。如果每個節點可以存多個 大於等於3 資料項,並且每個節點可以擁有多個 大於等於3 子節點的樹稱為n 大於等於3 叉樹。n叉樹相對於二叉樹而言,儲存相等數量的資料,n叉樹因為同一層存放的資料變多,相應樹的高度就變小,查詢...
關於資料結構之線段樹
這幾天都一直在看關於線段樹的題目還有題解,還有做題!以前也知道有線段樹這個東西,但是那時沒有好好的看,就看了個簡單的皮毛!所以現在又拿出來好好看看!一開始看,一直看題解,還有就是模仿,首先看一遍,初步了解一下,然後就是按著別人的題解再抄著寫一遍直到通過測試,當然不是直接對著乙個乙個的copy上,然後...
資料結構(java) 樹
線性結構中,乙個節點至多只有乙個頭節點,至多只有乙個尾節點,彼此連線起來是一條完整的線。比如鍊錶和陣列 而樹,非線性結構的典型例子,不再是一對一,而變成了一對多 而圖則可以是 多對多 如下圖所示 幾個概念 1 根節點 父親節點 孩子節點 葉子節點 2 節點的度 節點擁有的子樹的數目稱為節點的度。比如...