亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript數據結構與算法之二叉樹遍歷算法詳解【先序、中序、后序】

2019-11-19 12:05:10
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript數據結構與算法之二叉樹遍歷算法。分享給大家供大家參考,具體如下:

javascript數據結構與算法--二叉樹遍歷(先序)

先序遍歷先訪問根節點, 然后以同樣方式訪問左子樹和右子樹

代碼如下:

/* *二叉樹中,相對較小的值保存在左節點上,較大的值保存在右節點中 * * * *//*用來生成一個節點*/function Node(data, left, right) {  this.data = data;//節點存儲的數據  this.left = left;  this.right = right;  this.show = show;}function show() {  return this.data;}/*用來生成一個二叉樹*/function BST() {  this.root = null;  this.insert = insert;}/*將數據插入二叉樹 (1)設根節點為當前節點。 (2)如果待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點;反 之,執行第4步。 (3)如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 (4)設新的當前節點為原節點的右節點。 (5)如果當前節點的右節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 * */function insert(data) {  var n = new Node(data, null, null);  if (this.root == null) {    this.root = n;  }  else {    var current = this.root;    var parent;    while (true) {      parent = current;      if (data < current.data) {        current = current.left;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {//如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續執行下一次while循環。          parent.left = n;          break;        }      }      else {        current = current.right;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {          parent.right = n;          break;        }      }    }  }}/*先序遍歷 *用遞歸的方法 */function preOrder(node) {  if (!(node == null)) {    console.log(node.show() + " ");    preOrder(node.left);    preOrder(node.right);  }}/* 測試代碼 */var nums = new BST();nums.insert(23);nums.insert(45);nums.insert(16);nums.insert(37);nums.insert(3);nums.insert(99);nums.insert(22);console.log("先序遍歷: ");preOrder(nums.root);

運行結果:

javascript數據結構與算法--二叉樹遍歷(中序)

中序遍歷按照節點上的鍵值,以升序訪問BST上的所有節點

代碼如下:

/* *二叉樹中,相對較小的值保存在左節點上,較大的值保存在右節點中 * * * *//*用來生成一個節點*/function Node(data, left, right) {  this.data = data;//節點存儲的數據  this.left = left;  this.right = right;  this.show = show;}function show() {  return this.data;}/*用來生成一個二叉樹*/function BST() {  this.root = null;  this.insert = insert;}/*將數據插入二叉樹 (1)設根節點為當前節點。 (2)如果待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點;反 之,執行第4步。 (3)如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 (4)設新的當前節點為原節點的右節點。 (5)如果當前節點的右節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 * */function insert(data) {  var n = new Node(data, null, null);  if (this.root == null) {    this.root = n;  }  else {    var current = this.root;    var parent;    while (true) {      parent = current;      if (data < current.data) {        current = current.left;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {//如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續執行下一次while循環。          parent.left = n;          break;        }      }      else {        current = current.right;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {          parent.right = n;          break;        }      }    }  }}/*中序遍歷*用遞歸的方法*/function inOrder(node) {  if (!(node == null)) {    inOrder(node.left);    console.log(node.show() + " ");    inOrder(node.right);  }}/* 測試代碼 */var nums = new BST();nums.insert(23);nums.insert(45);nums.insert(16);nums.insert(37);nums.insert(3);nums.insert(99);nums.insert(22);console.log("中序遍歷: ");inOrder(nums.root);

運行結果:

javascript數據結構與算法--二叉樹遍歷(后序)

后序遍歷先訪問葉子節點,從左子樹到右子樹,再到根節點。

/* *二叉樹中,相對較小的值保存在左節點上,較大的值保存在右節點中 * * * *//*用來生成一個節點*/function Node(data, left, right) {  this.data = data;//節點存儲的數據  this.left = left;  this.right = right;  this.show = show;}function show() {  return this.data;}/*用來生成一個二叉樹*/function BST() {  this.root = null;  this.insert = insert;}/*將數據插入二叉樹 (1)設根節點為當前節點。 (2)如果待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點;反 之,執行第4步。 (3)如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 (4)設新的當前節點為原節點的右節點。 (5)如果當前節點的右節點為null,就將新的節點插入這個位置,退出循環;反之,繼續 執行下一次循環。 * */function insert(data) {  var n = new Node(data, null, null);  if (this.root == null) {    this.root = n;  }  else {    var current = this.root;    var parent;    while (true) {      parent = current;      if (data < current.data) {        current = current.left;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {//如果當前節點的左節點為null,就將新的節點插入這個位置,退出循環;反之,繼續執行下一次while循環。          parent.left = n;          break;        }      }      else {        current = current.right;//待插入節點保存的數據小于當前節點,則設新的當前節點為原節點的左節點        if (current == null) {          parent.right = n;          break;        }      }    }  }}/*后序遍歷 *用遞歸的方法 */function postOrder(node) {  if (!(node == null)) {    postOrder(node.left);    postOrder(node.right);    console.log(node.show() + " ");  }}/* 測試代碼 */var nums = new BST();nums.insert(23);nums.insert(45);nums.insert(16);nums.insert(37);nums.insert(3);nums.insert(99);nums.insert(22);console.log("后序遍歷: ");postOrder(nums.root);

運行結果:

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久久久久久| 国产精品久久一区主播| 97国产精品免费视频| 欧美激情伊人电影| 久久久久成人精品| 97国产在线视频| 久久精品国产一区| 欧美在线视频免费播放| 国产精品成人一区二区| 亚洲欧美一区二区三区四区| 中文字幕日韩免费视频| 亚洲色图激情小说| 欧美日韩国产专区| 日本一欧美一欧美一亚洲视频| 欧美性猛交xxxx富婆弯腰| 精品久久久中文| 亚洲欧美国产视频| 日韩经典中文字幕| 国产激情视频一区| 欧美www在线| 欧美视频在线视频| 久久琪琪电影院| 日韩欧美大尺度| 在线观看免费高清视频97| 九九精品视频在线观看| 91精品国产91久久久久久最新| 欧美成人亚洲成人日韩成人| 国产三级精品网站| 久久综合伊人77777蜜臀| 亚洲缚视频在线观看| 日韩精品免费在线| 午夜欧美不卡精品aaaaa| 亚洲最新av网址| 国产精品91久久久| 亚洲免费电影一区| 久久久久国产精品免费网站| 97国产精品久久| 午夜精品一区二区三区在线视频| 尤物99国产成人精品视频| 美女久久久久久久| 成人黄色av免费在线观看| 欧美麻豆久久久久久中文| 2019日本中文字幕| 久久久国产精品亚洲一区| 亚洲大尺度美女在线| 国产精品99免视看9| 国产一区红桃视频| 久久精品免费播放| 亚洲电影免费观看高清完整版在线观看| 91产国在线观看动作片喷水| 亚洲欧美精品一区| 日本免费一区二区三区视频观看| 1769国产精品| 欧美极品少妇与黑人| 国产丝袜精品第一页| 欧美亚洲视频在线看网址| 懂色av中文一区二区三区天美| 亚洲国产精品嫩草影院久久| 成人网页在线免费观看| 成人一区二区电影| 8x海外华人永久免费日韩内陆视频| 国产精品直播网红| 亚洲欧美激情视频| 国产在线拍揄自揄视频不卡99| 久久免费精品视频| 久久精品国产一区| 久久视频免费观看| 美日韩精品免费观看视频| 国产噜噜噜噜久久久久久久久| 欧美疯狂性受xxxxx另类| 秋霞av国产精品一区| 亚洲成av人片在线观看香蕉| 中文字幕av日韩| 欧美放荡办公室videos4k| 亚洲图片欧美日产| 亚洲精品91美女久久久久久久| 亚洲免费影视第一页| 亚洲激情久久久| 欧美激情精品久久久久久久变态| 在线成人一区二区| 57pao成人国产永久免费| 亚洲成人网av| 亚洲福利精品在线| 九九精品在线视频| 国产一区二区三区免费视频| 日产精品久久久一区二区福利| 国产精品一区二区av影院萌芽| 97在线视频精品| 亚洲美女免费精品视频在线观看| 日韩中文字幕在线视频| 日本欧美精品在线| 亚洲美女中文字幕| 久久久久国产精品一区| 亚洲欧美日韩一区二区三区在线| 欧美高清一级大片| 日韩暖暖在线视频| 欧美高清自拍一区| 国产一区视频在线播放| 欧美孕妇孕交黑巨大网站| 亚洲欧洲自拍偷拍| 日韩电影免费在线观看中文字幕| 久久综合电影一区| 伊人成人开心激情综合网| 中文字幕不卡在线视频极品| 欧美黑人xxx| 欧洲中文字幕国产精品| 欧洲成人在线观看| 精品成人69xx.xyz| 久久亚洲精品一区二区| 日韩av免费看| 欧美放荡办公室videos4k| 狠狠躁18三区二区一区| 亚洲人成电影网站色…| 日韩av日韩在线观看| 91精品国产综合久久久久久久久| 国产精品中文字幕在线| 九色精品美女在线| 青青在线视频一区二区三区| 国产精品网红直播| 精品亚洲一区二区三区在线观看| 日韩激情视频在线| 亚洲在线一区二区| 日韩成人中文电影| 亚洲一区二区少妇| 国产69久久精品成人看| 2023亚洲男人天堂| 日韩中文有码在线视频| 日韩人体视频一二区| 国产精品丝袜久久久久久高清| 日韩亚洲精品视频| 92看片淫黄大片欧美看国产片| 久久久精品免费| 亚洲日本aⅴ片在线观看香蕉| 26uuu亚洲国产精品| 国产日产欧美a一级在线| 中文字幕欧美国内| 国产精品福利小视频| 日韩精品免费在线播放| 久久久人成影片一区二区三区| 在线成人激情视频| 午夜剧场成人观在线视频免费观看| 国产97在线播放| 高清日韩电视剧大全免费播放在线观看| 国产第一区电影| 国产精品久久久久高潮| 91国语精品自产拍在线观看性色| 成人午夜激情免费视频| 亚洲欧美国产日韩中文字幕| 国内精品久久久久久| 久热精品视频在线观看| 欧美色视频日本高清在线观看| 国产精品久久久久久久电影| 日韩精品999| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产欧美一区二区三区久久人妖| 亚洲一区二区在线| 久久久999国产精品| 中文字幕免费精品一区高清| 精品国产一区二区三区在线观看| 日本亚洲欧洲色| 久久99视频免费| www日韩中文字幕在线看| 色妞久久福利网| 欧美一级大胆视频|