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

首頁 > 開發 > Java > 正文

Java中二叉樹的建立和各種遍歷實例代碼

2024-07-13 10:16:01
字體:
來源:轉載
供稿:網友

這是個常見的面試題,比如說通過二叉樹的先序和中序遍歷,得到二叉樹的層序遍歷等問題

先序+中序->建樹

假設現在有個二叉樹,如下:

二叉樹遍歷,java,java二叉樹遍歷算法,二叉樹的遍歷,java實現二叉樹遍歷,java二叉樹的遍歷算法

此時遍歷順序是:

PreOrder: GDAFEMHZ InOrder: ADEFGHMZ PostOrder: AEFDHZMG

現在給出先序(preOrder)和中序(InOrder),建立一顆二叉樹
或者給出中序(InOrder)和后序(PostOrder), 建立二叉樹,其實是一樣的

樹節點的定義:

java;">class Tree{	char val;	Tree left;	Tree right;	Tree(char val, Tree left, Tree right){		this.val = val;		this.left = left;		this.right = right;	}	Tree(){	}	Tree(char val){		this.val = val;		this.left = null;		this.right =null;	}}

建樹:

public static Tree buildTree(char[] preOrder, char[] inOrder){	//preOrder是先序序列	//inOrder是中序序列	if(preOrder == null || preOrder.length == 0){		return null;	}	Tree root = new Tree(preOrder[0]);	//找到inOrder中的root的位置	int inOrderIndex = 0;	for (char i = 0; i < inOrder.length; i++){		if(inOrder[i] == root.val){			inOrderIndex = i;		}	}	//preOrder的左子樹和右子樹部分	char[] preOrderLeft = Arrays.copyOfRange(preOrder, 1, 1+inOrderIndex);	char[] preOrderRight = Arrays.copyOfRange(preOrder, 1+inOrderIndex, preOrder.length);	//inOrder的左子樹和右子樹部分	char[] inOrderLeft = Arrays.copyOfRange(inOrder, 0, inOrderIndex);	char[] inOrderRight = Arrays.copyOfRange(inOrder, inOrderIndex+1, inOrder.length);	//遞歸建立左子樹和右子樹	Tree leftChild = buildTree(preOrderLeft, inOrderLeft);	Tree rightChild = buildTree(preOrderRight, inOrderRight);	root.left = leftChild;	root.right = rightChild;	return root;}

中序+后序去建樹其實是一樣的,此處不寫了

各種遍歷

后序遍歷

public static void postOrderPrint(Tree root){    //后續遍歷    //左右根    if(root.left != null){      postOrderPrint(root.left);    }    if(root.right != null){      postOrderPrint(root.right);    }    System.out.print(root.val + " ");  }

舉一反三,先序和中序是一樣的,此處不寫了

層序遍歷

可以用一個隊列Queue,初始先把root節點加入到隊列,當隊列不為空的時候取隊列頭的節點node,打印node的節點值,如果node的左右孩子不為空將左右孩子加入到隊列中即可

public static void layerOrderPrint(Tree root){    if(root == null){      return;    }    //層序遍歷    Queue<Tree> qe = new LinkedList<Tree>();    qe.add(root);    while(!qe.isEmpty()){      Tree node = qe.poll();      System.out.print(node.val + " ");      if(node.left != null){        qe.add(node.left);      }      if(node.right != null){        qe.add(node.right);      }    }  }

深度優先和廣度優先

其實就是換個說法而已,深度優先不就是先序遍歷嘛,廣度優先就是層序遍歷

public static void deepFirstPrint(Tree root){    //深度優先遍歷等價于先序遍歷    //所以可以直接使用先序遍歷    if(root == null){      return;    }    System.out.print(root.val + " ");    if(root.left != null){      deepFirstPrint(root.left);    }    if(root.right != null){      deepFirstPrint(root.right);    }  }public static void deepFirstPrintNoneRec(Tree root){    //深度優先遍歷的非遞歸形式    if(root == null){      return;    }    Stack<Tree> st = new Stack<Tree>();    st.add(root);    while(!st.isEmpty()){      Tree node = st.pop();      System.out.print(node.val + " ");      //棧是后進先出的      //先加右孩子后加左孩子      if(node.right != null){        st.add(node.right);      }      if(node.left != null){        st.add(node.left);      }    }  }

main函數:

public static void main(String[] args) {    char[] preOrder = "GDAFEMHZ".toCharArray();    char[] inOrder = "ADEFGHMZ".toCharArray();    Tree root = Main.buildTree(preOrder, inOrder);//   Main.postOrderPrint(root); //后序遍歷//   Main.layerOrderPrint(root); //層序遍歷//   Main.deepFirstPrint(root); //深度優先遍歷//   Main.deepFirstPrintNoneRec(root); //深度優先遍歷的非遞歸版本  }

總結

以上就是本文關于Java中二叉樹的建立和各種遍歷實例代碼的全部內容,希望對大家有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线精品播放av| 久久成人免费视频| 久久精品视频在线| 久久精品99久久久香蕉| 亚洲成年网站在线观看| 成人激情在线播放| 视频在线观看99| 亚洲精品第一页| 26uuu另类亚洲欧美日本一| 欧美人与性动交a欧美精品| 精品美女国产在线| 国模精品系列视频| 国产不卡在线观看| 美女999久久久精品视频| 波霸ol色综合久久| 亚洲专区在线视频| 久久全国免费视频| 国产精品高清在线观看| 国产视频综合在线| 欧美理论片在线观看| 国产亚洲欧洲高清| 国产精品旅馆在线| 国产精品欧美激情在线播放| 国产一区二区三区在线观看视频| 亚洲国产另类 国产精品国产免费| 97精品国产aⅴ7777| 黑人与娇小精品av专区| 91色视频在线导航| 日本一欧美一欧美一亚洲视频| 日韩av免费在线播放| 亚洲欧美日韩一区在线| www高清在线视频日韩欧美| 久久青草福利网站| 日韩欧美在线视频免费观看| 精品久久久av| 欧美小视频在线观看| 亚洲变态欧美另类捆绑| 久久综合88中文色鬼| 国内偷自视频区视频综合| 国产欧美一区二区三区久久| 91九色国产在线| 精品日韩视频在线观看| 久久精品成人欧美大片古装| 中文字幕一精品亚洲无线一区| 91九色单男在线观看| 中文字幕亚洲综合久久| 国产精品高清在线| 亚洲一区二区在线播放| 久久久久久久久国产精品| 亚洲欧美中文字幕在线一区| 8090理伦午夜在线电影| 一区二区日韩精品| 亚洲999一在线观看www| 亚洲欧美日韩中文在线制服| 国产视频精品久久久| 精品无人区太爽高潮在线播放| 久久久噜久噜久久综合| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧美日韩天堂| 久久男人的天堂| 国产精自产拍久久久久久蜜| 久久理论片午夜琪琪电影网| 久久亚洲精品国产亚洲老地址| 日韩国产高清视频在线| 777精品视频| 成人免费自拍视频| 精品福利在线看| 日韩精品中文在线观看| 国产精品久久久av久久久| 精品香蕉一区二区三区| 深夜精品寂寞黄网站在线观看| 成人国产精品久久久久久亚洲| 国产成人高潮免费观看精品| 欧美大片va欧美在线播放| 亚洲欧美综合精品久久成人| 欧美国产日本高清在线| 成人福利免费观看| 欧美俄罗斯性视频| 亚洲精品综合精品自拍| 欧美日韩国产一区在线| 亚洲性69xxxbbb| 538国产精品视频一区二区| 成人h片在线播放免费网站| 97人人模人人爽人人喊中文字| 日本高清+成人网在线观看| 日韩电影免费观看中文字幕| 在线看福利67194| 日本不卡免费高清视频| 欧美视频在线免费看| 久久久久久久久久久网站| 亚洲国产精品资源| 日本道色综合久久影院| 国产精品成人av性教育| 国产精品久久久久久影视| 欧美精品福利视频| 亚洲网站在线播放| 亚洲第一福利在线观看| 亚洲精品v欧美精品v日韩精品| 91精品视频在线免费观看| 日韩视频在线免费| 97欧美精品一区二区三区| 午夜精品三级视频福利| 在线亚洲欧美视频| 久久久久久久国产精品视频| 福利视频第一区| 国产精品夜间视频香蕉| 欧美尤物巨大精品爽| 2025国产精品视频| 亚洲欧洲一区二区三区久久| 91精品国产色综合久久不卡98口| 亚洲人成电影网站| 日韩电影中文 亚洲精品乱码| 精品亚洲夜色av98在线观看| 亚洲欧美国产va在线影院| 国语自产偷拍精品视频偷| 8050国产精品久久久久久| 亚洲精品自拍第一页| 久久精品在线播放| 日韩av在线不卡| 亚洲久久久久久久久久久| 欧美日韩综合视频网址| 久久在线免费视频| 亚洲美女av黄| 日韩成人中文电影| 日韩在线激情视频| 国产精品久久久久高潮| 黄色一区二区三区| 欧洲精品在线视频| 亚洲欧洲免费视频| 久久亚洲精品小早川怜子66| 久久久91精品国产一区不卡| 国模吧一区二区| 国产一区欧美二区三区| 久久久999精品| 欧美日韩国产在线| 精品久久久91| 国产主播在线一区| 国产精品小说在线| 有码中文亚洲精品| 欧美最猛性xxxxx(亚洲精品)| 亚洲精品久久久久久下一站| 欧美成人午夜剧场免费观看| 日韩精品高清在线| 国产不卡视频在线| 久久久日本电影| 91精品在线影院| 久久国产加勒比精品无码| 国产性猛交xxxx免费看久久| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧洲自拍偷拍| 久久久精品一区二区三区| 国产在线不卡精品| 日韩av色综合| 国产欧美日韩精品专区| 亚洲精品国产综合区久久久久久久| 日本中文字幕久久看| 亚洲缚视频在线观看| 欧洲日本亚洲国产区| 一道本无吗dⅴd在线播放一区| 亚洲欧美日韩中文视频| 成人两性免费视频| 日韩一区二区在线视频| 久久精品亚洲94久久精品| 亚洲第一区第一页|