一、須要定義二叉樹類數組
public class TreeNode { int val; TreeNode left;//左節點 TreeNode right;//右節點 TreeNode(int x) { val = x; } }
二、二叉樹的遍歷方式
簡單來講
前序遍歷:根左右:A, B, D, E, C, F, G
中序遍歷:左根右:D, B, E, A, F, C, G
後序遍歷:左右根:D, E, B, F, G, C, A
層序遍歷:按層從左到右訪問:優化
[ [A], [B,C], [D,E,F,G] ]
二叉樹的遍歷(前序遍歷、中序遍歷、後序遍歷、層序遍歷)
「遇到二叉樹,基本是 遞歸 」
首先前序獲得根,就能從中序中分出左子樹和右子樹。分出的左子樹,再從前序獲得它的根,就能從中序中分出它的左子樹和右子樹,分出的右子樹,再從前序獲得它的根,就能從中序中分出它的左子樹和右子樹....spa
總結下來就是,前序獲得根,中序分左右子樹。
再明確一下左右子的在 中序的範圍,用left right來表示;
以及根在 前序的位置 root,和根在 中序的位置 i。
假設一個二叉樹,.net
已知此序的root,left,right,inorder_root,length=(0,0,8,5,9)
前序:987216543
中序:271869453code
用前序的根[9]分:
前序:[9],87216543
中序:[27186],[9],[453]
分得前序:[9],[87216],[543]
獲得
左子樹1:前序:87216
左子樹1:中序:27186blog
該序的root,left,right,inorder_root=(1,0,4,3)(root+1,left,i-1,i)
右子樹1:前序:543
右子樹1:中序:453遞歸
該序的root,left,right,inorder_root=(6,6,8,7) (root+(i-left)+1,i+1,right,i)
後面以此類推索引
以此類推右子樹。
但一直都以最開始的序列爲參考寫索引位置。ci