二叉樹的中序遍歷

2021-10-03 20:27:15 字數 1294 閱讀 4597

給定乙個二叉樹,返回它的中序遍歷

遞迴:

private void inorder(btnode root) 

}

非遞迴:

二叉樹 中序遍歷  非遞迴

在中序遍歷中,遍歷的第乙個節點是最左側節點

1.先找以root為跟的二叉樹中最左側節點,並儲存所經路徑所有的節點

2.cur為空, 認為cur對應的樹已經遍歷

獲取棧頂元素 因為cur的左子樹為null 認為cur左子樹已經遍歷完

可以遍歷cur的根節點,cur的根節點在棧頂

3. 遍歷cur的右子樹 如果是空樹 不處理

非空 繼續 找最左側節點 繼續迴圈

後遞迴的先退出

public void inordernor()

btnode cur=root;

stacks=new stack<>();

// 1.先找以root為跟的二叉樹中最左側節點,並儲存所經路徑所有的節點

while(cur!=null||!s.empty())

//cur 為空,認為該棵樹已經遍歷

//可以遍歷cur的根節點,cur的根節點在棧頂

cur = s.peek();

system.out.print(cur.val + " ");

s.pop();

// 以 cur 為根的二叉樹:左子樹和跟以遍歷,剩餘右子樹 遍歷

cur = cur.right;

}}

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

treenode cur=root;

stacks=new stack<>();

// 1.先找以root為跟的二叉樹中最左側節點,並儲存所經路徑所有的節點

while(cur!=null||!s.empty())

//cur 為空,認為該棵樹已經遍歷

//可以遍歷cur的根節點,cur的根節點在棧頂

cur=s.peek();

res.add(cur.val);

s.pop();

// 以 cur 為根的二叉樹:左子樹和跟以遍歷,剩餘右子樹 遍歷

cur=cur.right;

}return res;

}}

二叉樹中序遍歷

訪問根結點的的左子樹,訪問根結點和訪問根結點的右子樹依次記作 l,d r 中序遍歷 ldr 演算法 遍歷根結點的左子樹,訪問根結點 遍歷根結點的右子樹 對於上面的圖,我們假定只有a,b,c三個結點,則中序遍歷結果為 b a c 採用上節 二叉樹鏈式儲存和前序遍歷 中的遞迴推演 db a c d b ...

二叉樹中序遍歷

二叉樹中序遍歷 非遞迴版本的中序遍歷用棧來實現。乙個元素出現在棧頂一次,這一次會被處理並出棧。trick 用乙個指標去記錄當前節點cur,如果cur left左側還未遍歷,就會將cur入棧並訪問cur left。一行很重要的 是cur cur right,這一句之後如果cur null,則說明棧頂元...

二叉樹先序遍歷和中序遍歷確定二叉樹

由於希望得到一顆二叉樹,所以返回值型別是乙個指向根節點的指標 表示得到了一顆二叉樹 btnode creatbt char pre,char int,int l1,int r1,int l2,int r2 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...