準備二叉樹的結構
static class node}
// 給二叉樹節點賦值
public static void main(string args)一.、遞迴版
先列印當前節點,再列印它的左子樹,再列印它的右子樹的過程叫做先序遍歷。
先列印當前節點的左子樹,當前節點,再列印它的右子樹的過程叫做中序遍歷。
先列印當前節點的左子樹,再列印它的右子樹,最後列印當前節點的過程叫做後序遍歷。
// 遞迴先序遍歷二、非遞迴版public static void presort(node head)
system.out.println(head.value);
presort(head.left);
presort(head.right);
}// 遞迴中序遍歷
public static void midsort(node head)
midsort(head.left);
system.out.println(head.value);
midsort (head.right);
}// 遞迴後序遍歷
public static void possort(node head)
possort(head.left);
possort (head.right);
system.out.println(head.value);
}
先序遍歷,非遞迴
1.先準備乙個棧。
2.如果頭節點不為null,將頭節點壓入棧。
3.有右節點先壓入右節點
4.有左節點後壓左節點
// 非遞迴先序遍歷中序遍歷,非遞迴,需要乙個輔助棧public static void prenoresort(node head)
if (node.left != null) }}
}
當前節點先把自己的左邊界都壓入棧中
1.遇到左節點不為空,將左節點壓入棧中
2.當前節點為空,從棧中拿乙個列印,當前節點向右移動
3.當前節點不為空,當前節點壓入棧,當前節點往左
// 非遞迴中序遍歷後序遍歷,左右中public static void midnoresort(node head)else }}
}
先序和中序會回到乙個節點兩次。
1.先序遍歷是中左右,改造先序遍歷,成中右左
2.用乙個輔助棧來接受改造的先序遍歷
3.將輔助棧列印,就是後序遍歷
// 非遞迴後序遍歷public static void posnoresort(node head)
if (head.right != null)
}while (!s2.isempty())
}}
先序建立二叉樹及先序 中序 後序遍歷
先序二叉樹 先序建立二叉樹 void createbitree bitree t t bitnode malloc sizeof bitnode t data cnt t lchild null t rchild null createbitree t lchild createbitree t r...
二叉樹先序 中序 後序遍歷
題目 用遞迴和非遞迴方式,分別按照二叉樹先序 中序和後序列印所有的節點。我們約定 先序遍歷順序為根 左 右 中序遍歷順序為左 根 右 後序遍歷順序為左 右 根。遞迴實現 遞迴遍歷二叉樹 先序 public void preorderrecur node head system.out.println...
二叉樹先序遍歷 中序遍歷 後序遍歷
輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...