二叉樹之先序遍歷

2021-10-05 06:35:04 字數 1158 閱讀 6994

對二叉樹進行遍歷時,即將對整個樹的遍歷不斷轉換為對每個結點進行同樣的遍歷。

1.遞迴思想

思路:(1)對根結點進行訪問;

(2)對根結點的左子樹進行先序遍歷;

(3)對根結點的右子樹進行先序遍歷。

**:參考:遞迴遍歷二叉樹

const treenode = ,

right:

},right: ,

right: }};

var preorderrecur = function(root)

list.push(root.val)

preorder(root.left);

preorder(root.right);

}preorder(root);

return list;

}var list = preorderrecur(treenode);

console.log('遞迴前序遍歷', list);

理解**,重點在於理解,先序遍歷對於每個結點,都是先訪問該結點,再訪問其左子樹,再訪問其右子樹。

2.迭代思想

一旦對根結點進行訪問,便會接著訪問它的左孩子,接著便會訪問它的左孩子的左孩子… 一直到當前結點的左孩子為空,形成一條左側鏈。接著便會訪問該結點的右子樹 -> 上一層左結點的右子樹 … -> …最後乙個右結點。先自頂向下的訪問左側鏈上的各結點,再自底向上的依次遍歷每一層上的右子樹。即對任意結點進行訪問時,都會先沿著該結點左側分支依次進行訪問。

思路:從整棵二叉樹的根結點開始,對於任意結點d,訪問d結點,若d的右結點不為空,則將d結點的右結點入棧,繼續訪問d的左結點,並對該左結點的左右結點進行同樣的操作。判斷d的左結點是否為空,若為空,則彈出棧頂,若棧為空,則退出演算法。

const treenode = ,

right:

},right: ,

right: }};

var preorder = function(root)

root = root.left;

}if (remstack.length == 0)

root = remstack.pop()

}return list;

}console.log(preorder(treenode));

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

先序構建二叉樹及先序遍歷二叉樹

先序為dlr d 根節點,l 左子樹,r 右子樹 a b c d e 先序序列為abdce,輸入為abd c e 表示空格,代表空樹 輸入按滿二叉樹輸入 每乙個節點都是乙個子樹的根節點 void pre create tree treenode t else else void pre visit ...

二叉樹的先序遍歷

二叉樹先序遍歷遵循 訪問根結點 遍歷其左子樹 遍歷其右子樹 簡單來說就是根 左樹 左樹的左樹 左樹的左樹的左樹 一直遍歷到沒有左樹為止 右樹 如果沒沒有右樹就往上 一直遍歷到右樹的右樹也沒有了 就結束了 class treenode object 初始化樹的 def init self,data 0...