首先為了方便大家記憶,作個解釋。
先序(preorder) ,中序(inorder),後序(postorder) 這裡指的是根節點的遍歷順序,確切叫先根(先根再左右),中根(先左再根再右),還是(先左後又再根)後根的順序輸出。
定義treenode
public class treenode
}
遞迴
public void preorder(treenode x,listans)
迭**法,迭代順序和中序遍歷是一樣的,只是加入結果的順序不一樣
public void inorder(treenode root,listans)
cur=stack.pop();
// ans.add(cur.val); //inorder
cur=cur.right;
} }
中序遍歷的寫法主要有兩種,乙個是遞迴,乙個是迭代的方式。關於二叉樹的問題,很多情況下是遞迴的寫法的,但是迭代也是一種換個思路的寫法。
遞迴的寫法
public void inorder(treenode x, listans)
迭代的寫法
public void inorder(treenode root,listans)
cur=stack.pop();
ans.add(cur.val);
cur=cur.right;
} }
遞迴寫法
public void postorder(treenode x, listans)
二叉樹先序 中序 後序遍歷
題目 用遞迴和非遞迴方式,分別按照二叉樹先序 中序和後序列印所有的節點。我們約定 先序遍歷順序為根 左 右 中序遍歷順序為左 根 右 後序遍歷順序為左 右 根。遞迴實現 遞迴遍歷二叉樹 先序 public void preorderrecur node head system.out.println...
二叉樹先序遍歷 中序遍歷 後序遍歷
輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...
二叉樹先序遍歷 後序遍歷 中序遍歷
從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...