二叉树的三种遍历方式

  PS: 此算法参考资料《数据结构与算法JavaScript描述》

1 //------------------------------------------------------------------
  2 //-----------------performance binary tree---------------------
  3 //------------------------------------------------------------------
  4 function Node(data, left, right){
  5     this.data = data;
  6     this.left = left;
  7     this.right = right;
  8     this.show = show;
  9 }
 10
 11 function show(){
 12     return this.data;
 13 }
 14
 15 //-----------------------二叉查找树---------------------------------
 16 function BST(){
 17     this.root = null;
 18     this.insert = insert;
 19     this.inOrder = inOrder;
 20 }
 21
 22 //------------------------insert node-------------------------------
 23 function insert(data){
 24     var node = new Node(data, null, null);
 25     if(this.root == null){
 26         this.root = node;
 27     }else{
 28         var current = this.root;
 29         var parent;
 30         while(true){
 31             parent = current;
 32             if(data < current.data){
 33                 current = current.left;
 34                 if(current == null){
 35                     parent.left = node;
 36                     break;
 37                 }
 38             }
 39             else{
 40                 current = current.right;
 41                 if(current == null){
 42                     parent.right = node;
 43                     break;
 44                 }
 45             }
 46
 47         }
 48     }
 49 }
 50
 51 //-------------------中序遍历(升序遍历,从小到大)-------------------
 52 function inOrder(node){
 53     if(node != null){
 54         inOrder(node.left);
 55         console.log(node.show() + ‘ ‘);
 56         inOrder(node.right);
 57     }
 58 }
 59
 60 //------------------中序遍历测试------------------------------------
 61 var nums = new BST();
 62 nums.insert(23);
 63 nums.insert(45);
 64 nums.insert(16);
 65 nums.insert(37);
 66 nums.insert(3);
 67 nums.insert(22);
 68 nums.insert(99);
 69 console.log(‘Inorder traversal: ‘);
 70 inOrder(nums.root);
 71
 72
 73
 74 //------------先序遍历(先根节点,后左节点,右节点)------------------
 75 function preOrder(node){
 76     if(node != null){
 77         console.log(node.show());
 78         preOrder(node.left);
 79         preOrder(node.right);
 80     }
 81 }
 82
 83 //------------------先序遍历测试------------------------------------
 84 var nums = new BST();
 85 nums.insert(23);
 86 nums.insert(45);
 87 nums.insert(16);
 88 nums.insert(37);
 89 nums.insert(3);
 90 nums.insert(22);
 91 nums.insert(99);
 92 console.log(‘preOrder traversal: ‘);
 93 preOrder(nums.root);
 94
 95
 96 //------------后序遍历(先叶子节点,后左节点,右节点,根节点)--------
 97 function postOrder(node){
 98     if(node != null){
 99         postOrder(node.left);
100         postOrder(node.right);
101         console.log(node.show());
102     }
103 }
104
105 //------------------后序遍历测试------------------------------------
106 var nums = new BST();
107 nums.insert(23);
108 nums.insert(45);
109 nums.insert(16);
110 nums.insert(37);
111 nums.insert(3);
112 nums.insert(22);
113 nums.insert(99);
114 console.log(‘postOrder traversal: ‘);
115 postOrder(nums.root);
116 //------------------------------------------------------------------
时间: 2024-10-22 05:00:49

二叉树的三种遍历方式的相关文章

二叉树的三种遍历方式的循环和递归的实现方式

///////////////////头文件:BST.h//////////////////////// #ifndef BST_H #define BST_H #include "StdAfx.h" #include<iostream> #include<stack> template<typename DataType> class BST { public: class Node { public: Node(int data=0):m_dat

折半查找/二分查找 以及二叉树的 三种遍历方式

二分查找   线性查找 1.二分查找 public class BinarySearch { /** * 二分查找 * @param data * @return */ public int binarySearch(long[] data,long n) { //左右 端点 int left =0; int right =data.length-1; //中间元素 int mid=-1; while(left<right){ // 有两种情况 1.left = right 2. left>r

公交车站捡垃圾之二叉树的三种遍历方法

# 二叉树的遍历 今天下午看了二叉树的三种遍历方式,虽然能写出代码,但是理解可能不太到位,感觉很容易忘,所以想到一个形象的方法,把每个节点当作公交车站,而访问节点则是在这个公交车站捡垃圾,右子树和左子树则表示岔路.然后这个捡垃圾的人钟爱左边这个方向,所以一直以左优先.甲乙丙三个人,都爱捡垃圾,但是思考方式不同,所以捡垃圾的方法有点不同. 先序遍历 先序遍历最简单,秉承的原则是,甲很小心谨慎,每次经过公交车站,怕别人捡了,都把垃圾先捡到手,直到左边的路走完了,再往回走,但是回来的过程中,在公交车站

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二

树的高度,深度,层数和三种遍历方式

树的高度: 当只有一个根节点的时候,高度就是0. //计算树的高度int depth(Node node){ if(node == NULL) return -1; int l = depth(node->left); int r = depth(node->right); return (l < r)?(r+1):(l+1);//当只有一个根节点的时候,高度就是-1+1=0} 层数: 树的高度最底下的为第1层(有的书定义为第0层),依次向上累加 树的深度: 完全二叉树是指这样的二叉树:

二叉树的四种遍历方式

二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次.四种遍历方式分别为:先序遍历.中序遍历.后序遍历.层序遍历. 遍历之前,我们首先介绍一下,如何创建一个二叉树,在这里博主宝宝用的是先建左树在建右树的方法, 首先要声明结点TreeNode类,代码如下: public class TreeNode { public int data; public TreeNode le

二叉树的三种遍历简单版

同学突然向我问二叉树的三种遍历代码.数据结构刚刚学了,自己很吃力的敲了出来. 和老师演示的代码有很大差距. #include <stdio.h>#include <string.h>#include <stdlib.h> #define Error -1#define Right 1 struct BiTnode{    char data;    struct BiTnode *LChild;    struct BiTnode *RChild; }; BiTnode

set的三种遍历方式-----不能用for循环遍历(无序)

set的三种遍历方式,set遍历元素 list 遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577662 set遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577893 map遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71580051 package sun.rain.amazi

十八 二分搜索树的三种遍历方式

三种遍历方式: package com.lt.datastructure.BST; public class BST<E extends Comparable<E>> { private class Node{ public E e; Node left,right; public Node(E e) { this.e = e; this.left = left; this.right = right; } } private Node root; private int size