平衡二叉树是什么? 平衡二叉树是什么?能通俗地说一下并举例子吗

\u4ec0\u4e48\u662f\u5e73\u8861\u4e8c\u53c9\u6811

\u5e73\u8861\u6811\uff1a\u5e73\u8861\u4e8c\u53c9\u6811

\u5e73\u8861\u6811\uff1a\u5e73\u8861\u4e8c\u53c9\u6811

平衡二叉树(AVL)

那对图 1 进行下改造,把数据重新节点重新连接下,图 2 如下:

图 2 可以看到以下特性:

1. 所有左子树的节点都小于其对应的父节点(4,5,6)<(7);(4)<(5);(8)< (9);

2. 所有右子树上的节点都大于其对应的父节点(8,9,10)>(7);(6)>(5);(10)>(9);

3. 每个节点的平衡因子差值绝对值 <=1;

4. 每个节点都符合以上三个特征。

满足这样条件的树叫平衡二叉树(AVL)树。

问:那再次查找节点 5,需要遍历多少次呢?

由于数据是按照顺序组织的,那查找起来非常快,从上往下找:7-5,只需要在左子树上查找,也就是遍历 2 次就找到了 5。假设要找到叶子节点 10,只需要在右子树上查找,那也最多需要 3 次,7-9-10。也就说 AVL 树在查找方面性能很好,最坏的情况是找到一个节点需要消耗的次数也就是树的层数, 复杂度为 O(logN)

如果节点非常多呢?假设现在有 31 个节点,用 AVL 树表示如图 3:

图 3 是一棵高度为 4 的 AVL 树,有 5 层共 31 个节点,橙色是 ROOT 节点,蓝色是叶子节点。对 AVL 树的查找来看起来已经很完美了,能不能再优化下?比如,能否把这个节点里存放的 KEY 增加?能否减少树的总层数?那减少纵深只能从横向来想办法,这时候可以考虑用多叉树。



平衡二叉树又称AVL树,它的插入语、删除、查找操作均可在O(log n)的时间内完成,平衡二叉树是建立在搜索二叉树基础上的平衡。1. AVL树或者是一棵空树,或者是具有下列性质的非空二叉搜索树:(1) 任一结点的左、右子树均为AVL树(2) 根结点左、右子树高度差绝对值不超过12. 对于二叉树中任一结点T,其平衡因子(BF)定义为BF(T)=hl-hr,其中hl和hr分别为T的左、右子树的高度有了平衡因子的定义,AVL树“任一结点左右子树高度差的绝对值不超过1”这一性质可以表述为“一棵AVL树种任一结点的平衡因子只能在集合{-1,0,1}中取值”,这就是平衡的量化标准



平衡树:平衡二叉树



  • 骞宠 浜屽弶鏍鐨勫叿浣撶畻娉
    绛旓細骞宠 浜屽弶鎼滅储鏍戝弻绉颁负AVL鏍戯紝瀹冧篃鏄竴妫典簩鍙夋悳绱㈡爲锛屾槸瀵逛簩鍙夋悳绱㈡爲鐨勪竴绉嶆敼杩涳紝鎴栭兘鏄叿鏈変笅鍒楁ц川鐨勪簩鍙夋爲锛氬畠鐨勫乏瀛愭爲鍜屽彸瀛愭爲閮芥槸骞宠 浜屽弶鏍锛屼笖宸﹀瓙鏍戝拰鍙冲瓙鏍戠殑娣卞害涔嬪樊鐨勭粷瀵瑰间笉瓒呰繃1銆傚钩琛″洜瀛愶紙Balance Factor,BF锛夊畾涔変负璇ヨ妭鐐圭殑宸﹀瓙鏍戠殑娣卞害鍑忓幓鍏跺彸瀛愭爲鐨勬繁搴︼紝鍒欏钩琛′簩鍙夋爲涓婃墍鏈夎妭鐐圭殑...
  • 浜屽弶骞宠 鏍鐨勬渶澶ч珮搴
    绛旓細骞宠 浜屽弶鏍锛堜篃绉颁负AVL鏍戯級鏄竴绉嶇壒娈婄殑浜屽弶鎼滅储鏍戯紝宸﹀瓙鏍戝拰鍙冲瓙鏍戠殑楂樺害宸笉瓒呰繃1銆傜敱浜庡钩琛$殑鐗规э紝骞宠 浜屽弶鏍戠殑鏈澶ч珮搴﹀彲浠ヨ淇濇寔鍦∣(logN)鐨勬椂闂村鏉傚害鍐呫傝繖鏄湪骞宠 浜屽弶鏍戜腑锛屾瘡涓妭鐐圭殑瀛愭爲楂樺害宸兘琚檺鍒跺湪涓涓緝灏忕殑鑼冨洿鍐咃紝浣垮緱鏍戠殑楂樺害鑳藉淇濇寔鍦ㄧ浉瀵硅緝浣庣殑姘村钩銆傞氳繃鏃嬭浆鎿嶄綔绛夊钩琛...
  • 骞宠 浜屽弶鏍戞槸浜屽弶鎺掑簭鏍戝悧?
    绛旓細骞宠 浜屽弶鏍涓嶆槸浜屽弶鎺掑簭鏍戙骞宠 鏍锛圔alance Tree锛孊T)鎸囩殑鏄紝浠绘剰鑺傜偣鐨勫瓙鏍戠殑楂樺害宸兘灏忎簬绛変簬1銆傚父瑙佺殑绗﹀悎骞宠 鏍戠殑鏈夛紝B鏍戯紙澶氳矾骞宠 鎼滅储鏍戯級銆丄VL鏍戯紙浜屽弶骞宠 鎼滅储鏍戯級绛夈傚钩琛℃爲鍙互瀹屾垚闆嗗悎鐨勪竴绯诲垪鎿嶄綔锛 鏃堕棿澶嶆潅搴﹀拰绌洪棿澶嶆潅搴︾浉瀵逛簬鈥2-3鏍戔濊浣庯紝鍦ㄥ畬鎴愰泦鍚堢殑涓绯诲垪鎿嶄綔涓缁堜繚鎸佸钩琛★紝...
  • 浜屽弶鎺掑簭鏍戠殑寤虹珛鐨勮繃绋嬩腑鏄浣曞疄鐜骞宠 
    绛旓細瀹冩垨鑰呮槸涓妫电┖鏍戯紝鎴栬呮槸鍏锋湁涓嬪垪鎬ц川鐨勪簩鍙夋爲锛氬畠鐨勫乏瀛愭爲鍜屽彸瀛愭爲閮芥槸骞宠 浜屽弶鏍戯紝涓斿乏瀛愭爲鍜屽彸瀛愭爲鐨勯珮搴︿箣宸箣宸殑缁濆鍊间笉瓒呰繃1.銆傚父鐢ㄧ畻娉曟湁锛氱孩榛戞爲銆丄VL鏍戙乀reap绛夈傚钩琛′簩鍙夋爲鐨勮皟鏁存柟娉骞宠 浜屽弶鏍戞槸鍦ㄦ瀯閫犱簩鍙夋帓搴忔爲鐨勮繃绋嬩腑锛屾瘡褰撴彃鍏ヤ竴涓柊缁撶偣鏃讹紝棣栧厛妫鏌ユ槸鍚﹀洜鎻掑叆鏂扮粨鐐硅岀牬鍧忎簡浜屽弶...
  • 銆愯璁恒戣闂:骞宠 浜屽弶鏍鍜屼簩鍙夋帓搴忔爲鐨勫叧绯粇
    绛旓細浠庡浘涓彲浠ョ湅鍑猴紝浜屽弶鎺掑簭鏍戠粍缁囨暟鎹椂锛岀敤浜庢煡鎵炬槸姣旇緝鏂逛究鐨勶紝鍥犱负姣忔缁忚繃涓娆¤妭鐐规椂锛屾渶澶氬彲浠ュ噺灏戜竴鍗婄殑鍙兘锛屼笉杩囨瀬绔儏鍐典細鍑虹幇鎵鏈夎妭鐐归兘浣嶄簬鍚屼竴渚э紝鐩磋涓婄湅灏辨槸涓鏉$洿绾匡紝閭d箞杩欑鏌ヨ鐨勬晥鐜囧氨姣旇緝浣庝簡锛屽洜姝ら渶瑕佸浜屽弶鏍戝乏鍙冲瓙鏍戠殑楂樺害杩涜骞宠 鍖栧鐞嗭紝浜庢槸灏辨湁浜骞宠 浜屽弶鏍锛圔alenced Binary ...
  • 浜屽弶鏍绠楁硶鏈夊摢浜涘簲鐢ㄥ満鏅?
    绛旓細1銆佸畬鍏ㄤ簩鍙夋爲鈥斺旇嫢璁句簩鍙夋爲鐨勯珮搴︿负h锛岄櫎绗 h 灞傚锛屽叾瀹冨悇灞 (1锝瀐-1) 鐨勭粨鐐规暟閮借揪鍒版渶澶т釜鏁帮紝绗琱灞傛湁鍙跺瓙缁撶偣锛屽苟涓斿彾瀛愮粨鐐归兘鏄粠宸﹀埌鍙充緷娆℃帓甯冿紝杩欏氨鏄畬鍏ㄤ簩鍙夋爲銆2銆佹弧浜屽弶鏍戔斺旈櫎浜嗗彾缁撶偣澶栨瘡涓涓粨鐐归兘鏈夊乏鍙冲瓙鍙朵笖鍙跺瓙缁撶偣閮藉鍦ㄦ渶搴曞眰鐨勪簩鍙夋爲銆3銆骞宠 浜屽弶鏍鈥斺斿钩琛′簩鍙...
  • 浠涔鏄滅悊鎯骞宠 浜屽弶鏍鈥
    绛旓細鈥滅悊鎯骞宠 浜屽弶鏍鈥濆簲褰撲负瀹屽叏浜屽弶鏍戯紝涓嶈兘涓烘弧浜屽弶鏍戯紝鍥犱负鏈夌殑棰樼洰涓姹傞珮搴︿负h鐨勭悊鎯冲钩琛′簩鍙夋爲鏈灏戞渶澶氭湁澶氬皯涓妭鐐癸紝濡傛灉涓烘弧浜屽弶鏍戜綍璋堟渶澶氭渶灏戙
  • 婊浜屽弶鏍涓浠涔涓嶆槸骞宠 鏍
    绛旓細婊′簩鍙夋爲涓嶆槸骞宠 鏍鐨勫師鍥狅細锛1锛夋弧浜屽弶鏍戯細闄や簡鍙剁粨鐐瑰姣忎竴涓粨鐐归兘鏈夊乏鍙冲瓙鍙朵笖鍙跺瓙缁撶偣閮藉鍦ㄦ渶搴曞眰鐨勪簩鍙夋爲銆傦紙2锛夊钩琛℃爲锛屽嵆骞宠 浜屽弶鏍锛屽張琚О涓篈VL鏍戯紙鍖哄埆浜嶢VL绠楁硶锛夛紝瀹冩槸涓妫典簩鍙夋帓搴忔爲锛屼笖鍏锋湁浠ヤ笅鎬ц川锛氬畠鏄竴妫电┖鏍戞垨瀹冪殑宸﹀彸涓や釜瀛愭爲鐨勯珮搴﹀樊鐨勭粷瀵瑰间笉瓒呰繃1锛屽苟涓斿乏鍙充袱涓瓙鏍...
  • 浜屽弶鏍鐨勭粨鐐
    绛旓細(1)銆佸畬鍏ㄤ簩鍙夋爲鈥斺旇嫢璁句簩鍙夋爲鐨勯珮搴︿负h锛岄櫎绗 h 灞傚锛屽叾瀹冨悇灞 (1锝瀐-1) 鐨勭粨鐐规暟閮借揪鍒版渶澶т釜鏁帮紝绗琱灞傛湁鍙跺瓙缁撶偣锛屽苟涓斿彾瀛愮粨鐐归兘鏄粠宸﹀埌鍙充緷娆℃帓甯冿紝杩欏氨鏄畬鍏ㄤ簩鍙夋爲銆(2)銆佹弧浜屽弶鏍戔斺旈櫎浜嗗彾缁撶偣澶栨瘡涓涓粨鐐归兘鏈夊乏鍙冲瓙鍙朵笖鍙跺瓙缁撶偣閮藉鍦ㄦ渶搴曞眰鐨勪簩鍙夋爲銆(3)銆骞宠 浜屽弶鏍鈥...
  • 浜屽弶鏍涓簭閬嶅巻鑳藉惁寰楀埌闄嶅簭鍒?
    绛旓細鍓嶆彁鏉′欢鏄細杩欎釜骞宠 浜屽弶鏍戜腑鐨勬渶澶у厓绱犳棤宸﹀瓙鏍戙骞宠 浜屽弶鏍戞槸涓棰椾簩鍙夋悳绱㈡爲锛屼腑搴忛亶鍘嗗緱鍒颁竴涓檷搴忓簭鍒楋紝璇存槑宸﹁妭鐐瑰>鐖惰妭鐐>鍙宠妭鐐广傚鏋滄渶澶у厓绱犳湁宸﹀瓙鏍戯紝鍒欏乏瀛愭爲鐨勫煎氨姣旀渶澶у厓绱犵殑鍊煎ぇ锛屾墍浠ヤ笉鍙兘鏈夊乏瀛愭爲銆傛牴鎹钩琛′簩鍙夋爲鐨勫畾涔夋湁锛屼换鎰忕粨鐐圭殑宸︺佸彸瀛愭爲楂樺害宸殑缁濆鍊间笉瓒呰繃 1 銆傚彲浠...
  • 扩展阅读:平衡二叉树怎么画 ... 二叉树的遍历流程图 ... 平衡二叉树图例 ... 二叉树图解 ... 满二叉树示意图 ... 平衡二叉树的旋转图解 ... 平衡二叉树动画演示 ... 平衡二叉树画法唯一吗 ... 二叉树和平衡二叉树区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网