c语言二叉树问题,勿写代码,求详细思考过程 C语言二叉树遍历算法,不求代码,求大概讲解怎么做
\u4e00\u9053\u6570\u636e\u7ed3\u6784\u5173\u4e8e\u4e8c\u53c9\u6811\u7684\u95ee\u9898\uff0c\u6c42\u5199\u51faC\u8bed\u8a00\u4ee3\u7801\u4e8c\u53c9\u6811\u662f\u91c7\u7528\u9012\u5f52\u5b9a\u4e49\u7684\uff0c\u5b9e\u73b0\u8d77\u6765\u4ee3\u7801\u7b80\u6d01\uff08\u4e5f\u8bb8\u5e76\u4e0d\u7b80\u5355\uff09\u3002\u5e76\u4e14\u5b83\u5728\u5177\u4f53\u7684\u8ba1\u7b97\u673a\u79d1\u5b66\u4e2d\u6709\u5f88\u91cd\u8981\u7684\u8fd0\u7528\uff0c\u662f\u4e00\u79cd\u5f88\u91cd\u8981\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4e8c\u53c9\u6811\u6709\u4e09\u79cd\u904d\u5386\u548c\u5efa\u7acb\u7684\u65b9\u5f0f\u3002\u4eca\u5929\u5148\u5b66\u4e60\u4e00\u4e0b\u5b83\u7684\u5efa\u7acb\u548c\u6253\u5370\u3002
\u4ee5\u4e0b\u4ee3\u7801\u5728Win-Tc1.9.1\u4e0b\u7f16\u8bd1\u901a\u8fc7\u3002
#include
#define ElemType char
//\u8282\u70b9\u58f0\u660e\uff0c\u6570\u636e\u57df\u3001\u5de6\u5b69\u5b50\u6307\u9488\u3001\u53f3\u5b69\u5b50\u6307\u9488
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//\u5148\u5e8f\u5efa\u7acb\u4e8c\u53c9\u6811
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//\u8fd4\u56de\u6839\u8282\u70b9
}
//\u5148\u5e8f\u904d\u5386\u4e8c\u53c9\u6811
void PreOrderTraverse(BiTree T){
if(T){
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//\u4e2d\u5e8f\u904d\u5386
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
printf("%c",T->data);
PreOrderTraverse(T->rchild);
}
}
//\u540e\u5e8f\u904d\u5386
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//\u5efa\u7acb
PreOrderTraverse(T);//\u8f93\u51fa
getch();
}
\u8bf4\u660e\u4e09\u4e2a\u540d\u8bcd\uff0c\u5de6\u513f\u5b50\uff0c\u53f3\u513f\u5b50\uff0c\u7236\u8282\u70b9\u3002\u8fd9\u4e2a\u5e94\u8be5\u5f88\u597d\u7406\u89e3\u3002
\u4e2d\u5e8f\u5c31\u662f
1\u3001\u5982\u679c\u6709\u5de6\u513f\u5b50\u5148\u8bfb\u5de6\u513f\u5b50\uff0c\u4e00\u76f4\u6b7b\u5faa\u73af\u5230\u6ca1\u6709\u5de6\u513f\u5b50\u5c31\u5f00\u59cb\u8bfb
2\u3001\u8bfb\u5b8c\u5de6\u513f\u5b50\u5411\u4e0a\u8d70\u5df2\u8bfb\u8282\u70b9\u7684\u7236\u8282\u70b9
3\u3001\u8bfb\u53d6\u53f3\u8282\u70b9\uff0c\u8bfb\u53d6\u524d\u9700\u8981\u8fdb\u884c\u7b2c\u4e00\u6b65\u7684\u5224\u5b9a\uff0c\u77e5\u9053\u53ef\u4ee5\u8bfb\u53d6\u672c\u8282\u70b9\u7b97\u662f\u7ed3\u675f\u3002
\u5148\u5e8f\uff0c
1\uff0c\u8bfb\u53d6\u7236\u8282\u70b9\uff0c
2\u3001\u8bfb\u53d6\u5de6\u513f\u5b50\uff08\u6709\u5219\u8bfb\uff09\uff0c
3\u3001\u5faa\u73af2\uff0c\u77e5\u9053\u6ca1\u6709\u5de6\u513f\u5b50\u4e86\u8bfb\u53d6\u53f3\u513f\u5b50
4\u3001\u8bfb\u5b8c\u53f3\u513f\u5b50\u7ee7\u7eed\u8d701\u30012.\uff08\u6700\u7ec8\u6240\u6709\u8282\u70b9\u90fd\u80fd\u8bfb\u5b8c\uff09
\u540e\u7eed\uff0c
1\u3001\u5982\u679c\u6709\u5de6\u513f\u5b50\u5148\u8bfb\u5de6\u513f\u5b50\uff0c\u4e00\u76f4\u6b7b\u5faa\u73af\u5230\u6ca1\u6709\u5de6\u513f\u5b50\u5c31\u5f00\u59cb\u8bfb
2\u3001\u8bfb\u5b8c\u5de6\u513f\u5b50\u5411\u4e0a\u8d70\u5df2\u8bfb\u8282\u70b9\u7684\u7236\u8282\u70b9\u7684\u53f3\u513f\u5b50\uff0c
3\u3001\u8bfb\u53d6\u53f3\u8282\u70b9\uff0c\u8bfb\u53d6\u524d\u9700\u8981\u8fdb\u884c\u7b2c\u4e00\u6b65\u7684\u5224\u5b9a\uff0c\u77e5\u9053\u53ef\u4ee5\u8bfb\u53d6\u672c\u8282\u70b9\u7b97\u662f\u7ed3\u675f\u3002
\u4f60\u6309\u7167\u8fd9\u4e2a\u6b65\u9aa4\u8d70\u4e00\u904d\u5c31\u77e5\u9053\u4e86\uff0c\u8fd9\u4e9b\u4e1c\u897f\u5173\u952e\u662f\u7406\u89e3\uff0c\u770b\u770b\u5177\u4f53\u8fc7\u7a0b\u624d\u80fd\u8bb0\u4f4f\u3002
后序遍历:若树不空,则先依次后根遍历各棵子树,然后访问根结点。(先左后右)
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。
从后序遍历:CDABE得出E是最顶根节点。
然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。
再分析后序遍历CDA可以知道A是CD的根,
而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)
最后,先序遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。
于是得到结束: 先序遍历是 EACDB
[1]由先序得E是根,由中序得左子树CAD,右子树B
[2]所以左子树先序CDA,中序CAD;右子树先序B,中序B
递归
故最终
E
A B
C D
绛旓細鍚庡簭閬嶅巻锛氳嫢鏍戜笉绌猴紝鍒欏厛渚濇鍚庢牴閬嶅巻鍚勬5瀛愭爲锛岀劧鍚庤闂牴缁撶偣銆傦紙鍏堝乏鍚庡彸锛変腑搴忛亶鍘嗭細鑻ユ爲涓嶇┖锛屽垯鍏堣闂乏瀛愭爲锛屽啀璁块棶鏍癸紝鍐嶈闂彸瀛愭爲銆備粠鍚庡簭閬嶅巻锛欳DABE寰楀嚭E鏄渶椤舵牴鑺傜偣銆傜劧鍚庝腑搴忛亶鍘嗭細CADEB寰楀嚭CAD鏄疎鐨勫乏瀛愭爲涓殑锛孊鏄疎鐨勫彸瀛愭爲涓殑銆傚啀鍒嗘瀽鍚庡簭閬嶅巻CDA鍙互鐭ラ亾A鏄疌D鐨勬牴锛岃屼腑...
绛旓細K&R涓殑涓涓疄鐜帮紝鍙互璇诲彇鏁板瓧锛屾彃鍏浜屽弶鏍戯紝骞朵笖缁熻鍑虹幇娆℃暟銆傛渶鍚庤緭鍑猴紝杩欓噷鍋囪鍙鍙栨鏁帮紝鑷繁鍙互鏀筭etword鍑芥暟 include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h> #define MAXLINE 100 struct num { int number; int count; struct num *left; struct num...
绛旓細鍏堣冭檻搴︿负2鐨勭粨鐐癸紝绗竴灞1涓紝绗簩灞2涓紝绗笁灞4涓紝绗洓灞8涓紝绗簲灞8涓紝鍏23涓傜劧鍚庣5灞傝繕鏈8涓┖浣嶏紝鍏堝亣璁句负鍙跺瓙鑺傜偣锛屽嵆搴︿负0銆傜浜斿眰婊★紝鐩墠鎬诲叡31涓粨鐐广傜劧鍚庣浜斿眰鐨8涓害涓2鐨勭粨鐐瑰彲浠ュ紩鐢冲嚭16涓彾瀛愮粨鐐癸紝鎬诲叡47涓紝浠ユ弧瓒抽鎰忥紝鍋囪鎴愮珛銆傛晠6灞傘傚綋鐒舵瘮杈冪畝鍗曠殑棰樼敾...
绛旓細鏈灏戠粨鐐规暟锛屽彲浠ヨ鎯充负涓涓弧浜屽弶鏍锛屽嵆鎵鏈夐潪鍙跺瓙缁撶偣搴︿负2锛36涓彾缁撶偣鍦ㄦ渶搴曞眰锛屽掓暟绗簩灞傛湁14涓彾瀛愮粨鐐癸紝鍏99缁撶偣 闈炲彾瀛愮粨鐐癸細1(椤跺眰1)+2(2灞)+4(3)+8(4)+16(5)+18(6灞)=49 鍙跺瓙缁撶偣锛14(6灞)+36(7灞傚簳灞)=50
绛旓細杩欎釜闂锛鍙互鐪嬫垚瀹屽叏浜屽弶鏍戯紝鏈夋ц川鏈夎妭鐐筰鐨勭埗鑺傜偣涓猴細 i/2.鑰岄鐩姹傜殑鎰忔濅篃灏辨槸鎵惧埌涓や釜鑺傜偣鐨勫叕鍏辩埗鑺傜偣銆傦紙鍚彲鑳戒负鍏朵腑涓涓妭鐐癸級鍥犳锛屾濊矾濡備笅锛氳緭鍏ヤ袱涓 x,y 鎵惧埌杈冨ぇ鐨勯偅涓紝锛堝惊鐜殑锛屽洜涓嶆柇鏀瑰彉锛屾墍浠ラ渶涓嶆柇姣旇緝锛夊仛x=x/2锛涳紙鍋囪姝ゆ椂x杈冨ぇ,x涓篿nt 鍨嬶級鐒跺悗鍐嶆瘮杈冿紝锛...
绛旓細H E I C F J 涓簭閬嶅巻搴忓垪: H D B E I A F J C 鍚庡簭閬嶅巻搴忓垪: H D I E B J F C A浜屽弶鏍绀烘剰鍥: A / \ B C / \ / D E F / \ \ H I J//C璇█娴嬭瘯绋嬪簭#include "stdio.h"#include "stdlib.h"struct tree...
绛旓細scanf("%d %d",&p,&q); pos = position(p,q); printf("%d \n", pos); times--; } return 0;}int position(int p,int q){ //printf("%d %d\n",
绛旓細棣栧厛锛屼腑搴忕殑娆″簭锛氾紙宸﹀瓙鏍戜腑搴忥級鏍癸紙鍙冲瓙鏍戜腑搴忥級鍚庡簭鐨勬搴忥細锛堝乏瀛愭爲鍚庡簭锛夛紙鍙冲瓙鏍戝悗搴忥級鏍 绠楁硶锛氬悗搴忎腑锛屾渶鍚庝竴涓妭鐐癸紝灏辨槸鏍广備粠涓簭涓壘鍒拌繖涓牴锛屾牴鎶婁腑搴忓垎鎴愪袱閮ㄥ垎锛屽乏瀛愭爲鍜屽彸瀛愭爲銆備腑搴忎腑宸﹀瓙鏍戠殑鎴愬憳銆佹暟閲忓拰鍚庡簭宸﹀瓙鏍戠浉鍚岋紝浣嗘搴忎笉鍚屻備簬鏄彲浠ョ‘瀹氬悗搴忎腑宸﹀彸瀛愭爲鑼冨洿銆傚...
绛旓細浜屽弶鏍绠楁硶甯歌鐢ㄤ簬瀹炵幇浜屽弶鏌ユ壘鏍戝拰浜屽弶鍫嗐傞鍏堟墦寮VC++6.0 閫夋嫨鏂囦欢锛屾柊寤 閫夋嫨C++ source file 鏂板缓涓涓┖鐧芥枃妗 棣栧厛澹版槑澶存枃浠 瀹氫箟鏍戠殑缁撶偣缁撴瀯 typedef struct TreeNode{ char data;/*鏍戜腑缁撶偣鐨勬暟鎹槸涓涓瓧绗*/ struct TreeNode *lchild; struct TreeNode *rchild; }TREENODE;澹版槑鍙橀噺 int...
绛旓細杩欏氨鏄寜鍏堝簭绠楁硶寤虹珛鐨浜屽弶鏍戯紝濡傛灉涓涓粨鐐规病鏈夋煇妫靛瓙鏍戯紝杈撳叆涓涓┖鏍煎氨琛屼簡銆傛瘮濡傚浜庡鍥炬墍绀虹殑浜屽弶鏍戯細搴旇杩欐牱杈撳叆锛124涓ょ┖鏍5涓ょ┖鏍36涓夌┖鏍 杩欐槸杩愯缁撴灉鐨勬埅鍥撅細