遍历二叉树遍历
遍历二叉树的基本概念源自其递归定义,它由根节点及其左右子树构成。在任一节点上,有三种可能的操作顺序:访问节点(N)、遍历左子树(L)、遍历右子树(R)。这六种可能的执行次序分别为NLR、LNR、LRN、NRL、RNL和RLN,但前三种(NLR、LNR和LRN)与后三种是对称的,因此主要讨论先左后右的前三种顺序。
首先,我们有三种主要的遍历策略,根据访问节点的时机命名:
- 前序遍历(PreorderTraversal)(NLR):访问根节点发生在遍历左右子树之前。
- 中序遍历(InorderTraversal)(LNR):访问节点发生在遍历左右子树之间(即根、左、右的顺序)。
- 后序遍历(PostorderTraversal)(LRN):访问节点发生在遍历左右子树之后。
在二叉树的遍历算法中,以中序遍历为例,其定义如下:如果二叉树非空,就按照左子树、根节点、右子树的顺序进行操作。先序遍历和后序遍历的定义类似,只是访问根节点的位置不同。
遍历顺序的体现可通过二叉树的搜索路线理解,从根节点出发,逆时针沿二叉树外缘移动,每次经过节点都会访问三次,最后返回根节点。不同的遍历顺序会产生不同的节点访问序列,如中序遍历序列(D B A E C F)、先序遍历序列(A B D C E F)和后序遍历序列(D B E F C A)。
在构建二叉链表时,通常基于先序遍历的顺序,通过虚结点(以空格表示)来表示空指针的位置。构造算法会递归地生成节点,直到读取到空格为止。
扩展资料
所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。 遍历在二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。当然遍历的概念也适合于多元素集合的情况,如数组。
绛旓細鍥涖 閬嶅巻浜屽弶鏍 浜屽弶鏍戞槸涓绉嶉潪绾挎х殑鏁版嵁缁撴瀯锛屽湪瀵瑰畠杩涜鎿嶄綔鏃讹紝鎬绘槸闇瑕侀愪竴瀵规瘡涓暟鎹厓绱犲疄鏂 鎿嶄綔锛岃繖鏍峰氨瀛樺湪涓涓搷浣滈『搴忛棶棰橈紝鐢辨鎻愬嚭浜嗕簩鍙夋爲鐨勯亶鍘嗘搷浣溿傛墍璋撻亶鍘嗕簩鍙夋爲灏 鏄寜鏌愮椤哄簭璁块棶浜屽弶鏍戜腑鐨勬瘡涓粨鐐逛竴娆′笖浠呬竴娆$殑杩囩▼銆傝繖閲岀殑璁块棶鍙互鏄緭鍑恒佹瘮 杈冦佹洿鏂般佹煡鐪嬪厓绱...
绛旓細鏍戠殑鍏堟牴閬嶅巻鍜浜屽弶鏍鐨勫厛搴忛亶鍘嗙浉鍚岋紝鍚庢牴閬嶅巻涓庝簩鍙夋爲鐨勪腑搴忛亶鍘嗙浉鍚屻備簩鍙夋爲锛圔inary tree锛夋槸鏍戝舰缁撴瀯鐨勪竴涓噸瑕佺被鍨嬨傝澶氬疄闄呴棶棰樻娊璞″嚭鏉ョ殑鏁版嵁缁撴瀯寰寰鏄簩鍙夋爲褰㈠紡锛屽嵆浣挎槸涓鑸殑鏍戜篃鑳界畝鍗曞湴杞崲涓轰簩鍙夋爲锛岃屼笖浜屽弶鏍戠殑瀛樺偍缁撴瀯鍙婂叾绠楁硶閮借緝涓虹畝鍗曪紝鍥犳浜屽弶鏍戞樉寰楃壒鍒噸瑕併備簩鍙夋爲鐗圭偣鏄瘡涓粨鐐...
绛旓細鎵璋閬嶅巻锛屾槸鎸囨部鐫鏌愭潯鎼滅储璺嚎锛屼緷娆″鏍戜腑姣忎釜缁撶偣鍧囧仛涓娆′笖浠呭仛涓娆¤闂傝闂粨鐐规墍鍋氱殑鎿嶄綔渚濊禆浜庡叿浣撶殑搴旂敤闂銆 閬嶅巻鏄浜屽弶鏍涓婃渶閲嶈鐨勮繍绠椾箣涓锛屾槸浜屽弶鏍戜笂杩涜鍏跺畠杩愮畻涔嬪熀纭銆
绛旓細1銆佸厛搴忛亶鍘嗭紝鎸夌収鏈浼樺厛椤哄簭娌夸竴瀹氳矾寰勭粡杩囪矾寰勪笂鎵鏈夌殑绔欙紝鍦ㄤ簩鍙夋爲涓紝鍏堟牴鍚庡乏鍐嶅彸锛2銆侀鍏堣闂牴缁撶偣鐒跺悗閬嶅巻宸﹀瓙鏍戯紝鏈鍚庨亶鍘嗗彸瀛愭爲锛屽湪閬嶅巻宸︺佸彸瀛愭爲鏃讹紝浠嶇劧鍏堣闂牴缁撶偣锛岀劧鍚庨亶鍘嗗乏瀛愭爲锛屾渶鍚庨亶鍘嗗彸瀛愭爲锛3銆佷篃绉板厛鏍归亶鍘嗐佸墠搴忛亶鍘嗐備簩銆佸悗搴忛亶鍘 1銆佸悗搴忛亶鍘嗘槸浜屽弶鏍戦亶鍘鐨勪竴绉嶏紝鏈...
绛旓細瀵逛换鎰忕粰瀹氱殑浜屽弶鏍(椤剁偣鏁拌嚜瀹)寤虹珛瀹冪殑浜屽弶閾捐〃瀛樺偍缁撴瀯,骞跺埄鐢ㄦ爤鐨勪簲绉嶅熀鏈繍绠(缃┖鏍堛佽繘鏍堛佸嚭鏍堛佸彇鏍堥《鍏冪礌銆佸垽鏍堢┖)瀹炵幇浜屽弶鏍戠殑鍏堝簭銆佷腑搴忋佸悗搴忎笁绉閬嶅巻,杈撳嚭涓夌閬... 瀵逛换鎰忕粰瀹氱殑浜屽弶鏍(椤剁偣鏁拌嚜瀹)寤虹珛瀹冪殑浜屽弶閾捐〃瀛樺偍缁撴瀯,骞跺埄鐢ㄦ爤鐨勪簲绉嶅熀鏈繍绠(缃┖鏍堛佽繘鏍堛佸嚭鏍堛佸彇鏍堥《鍏冪礌銆佸垽...
绛旓細2銆浜屽弶鏍鐨閬嶅巻锛氫簩鍙夋爲鐨勯亶鍘嗘槸鎸囨寜鐓ф煇绉嶈瀹氱殑椤哄簭璁块棶浜屽弶鏍戠殑姣忎釜鑺傜偣锛屼娇寰楁瘡涓妭鐐硅璁块棶涓斾粎琚闂竴娆°備簩鍙夋爲鏈変笁绉嶅熀鏈殑閬嶅巻鏂瑰紡锛氬墠搴忛亶鍘嗐佷腑搴忛亶鍘嗗拰鍚庡簭閬嶅巻銆傚墠搴忛亶鍘嗙殑椤哄簭鏄牴鑺傜偣涓宸﹀瓙鏍戜竴鍙冲瓙鏍戯紝涓簭閬嶅巻鐨勯『搴忔槸宸﹀瓙鏍戜竴鏍硅妭鐐逛竴鍙冲瓙鏍戯紝鍚庡簭閬嶅巻鐨勯『搴忔槸宸﹀瓙鏍戜竴鍙冲瓙鏍戜竴鏍...
绛旓細閬嶅巻鐨勬柟娉曟湁锛氬眰搴忛亶鍘嗐佸厛搴忛亶鍘嗐佷腑搴忛亶鍘嗐佸悗搴忛亶鍘嗙瓑锛屼互涓嬮潰鐨浜屽弶鏍涓轰緥浠嬬粛閬嶅巻 E / \ B F / \ \ A D H / / \ C G I \ K / J 1.灞傚簭閬嶅巻 鍗充粠涓婂埌涓嬫寜灞傛璁块棶璇ユ爲锛屾瘡涓灞傚崟鐙緭鍑轰竴琛岋紝姣忎竴灞傝姹傝闂殑椤哄簭涓轰粠宸﹀埌鍙炽備緥瀛愪腑灞傚簭閬嶅巻...
绛旓細浠浜屽弶鏍鐨勯掑綊瀹氫箟鍙煡锛屼竴妫甸潪绌虹殑浜屽弶鏍戠敱鏍圭粨鐐瑰強宸︺佸彸瀛愭爲杩欎笁涓熀鏈儴鍒嗙粍鎴愩傚洜姝わ紝鍦ㄤ换涓缁欏畾缁撶偣涓娿傗懘璁块棶缁撶偣鏈韩锛圢锛夛紝鈶閬嶅巻璇ョ粨鐐圭殑宸﹀瓙鏍戯紙L锛夛紝鈶堕亶鍘嗚缁撶偣鐨勫彸瀛愭爲锛圧锛夈備互涓婁笁绉嶆搷浣滄湁鍏鎵ц娆″簭锛歂LR銆丩NR銆丩RN銆丯RL銆丷NL銆丷LN銆傛敞鎰忥細鍓嶄笁绉嶆搴忎笌鍚庝笁绉嶆搴忓绉帮紝鏁呭彧...
绛旓細閬嶅巻鏄鏍戠殑涓绉嶆渶鍩烘湰鐨勮繍绠楋紝鎵璋閬嶅巻浜屽弶鏍锛屽氨鏄寜涓瀹氱殑瑙勫垯鍜岄『搴忚蛋閬嶄簩鍙夋爲鐨勬墍鏈夌粨鐐癸紝浣挎瘡涓涓粨鐐归兘琚闂竴娆★紝鑰屼笖鍙璁块棶涓娆°傜敱浜庝簩鍙夋爲鏄潪绾挎х粨鏋勶紝鍥犳锛屾爲鐨勯亶鍘嗗疄璐ㄤ笂鏄皢浜屽弶鏍戠殑鍚勪釜缁撶偣杞崲鎴愪负涓涓嚎鎬у簭鍒楁潵琛ㄧず銆傝L銆丏銆丷鍒嗗埆琛ㄧず閬嶅巻宸﹀瓙鏍戙佽闂牴缁撶偣鍜岄亶鍘嗗彸瀛愭爲锛 ...
绛旓細鏍规嵁涓簭閬嶅巻搴忓垪锛屽垯浜屽弶鏍鐨勫舰鎬佷竴瀹氬鍥4鈥9鎵绀恒9鑰冭檻A鐨勫乏瀛愭爲銆傛牴鎹簩鍙夋爲鐨勫厛搴忛亶鍘嗗簭鍒楋紝鍙煡鐢盉鍜孋鏋勬垚鐨勪簩鍙夋爲锛孊涓烘牴缁撶偣锛屽洜涓哄湪鍏堝簭閬嶅巻搴忓垪涓紝B姣擟鍏堣璁块棶銆傚啀鏍规嵁涓簭閬嶅巻搴忓垪锛屽彲鐭鏄疊鐨勫乏瀛╁瓙锛屽洜涓築鏄敱B鍜孋鏋勬垚鐨勪簩鍙夋爲鐨勬牴缁撶偣锛孋鍦˙鍓嶈璁块棶锛屾牴鎹腑搴忛亶鍘嗙殑椤哄簭锛...